2025-11-11 linux 知识 更改命令行前缀颜色
第一步:nano ~/.bashrc
第二步:# 命令输入为绿色加粗(提示符前缀默认白色)
             PS1='\u@\h:\w\$ \[\e[1;32m\]'
             # 提示符:紫色用户名@主机名 + 白色路径 + 白色$符;命令输入:青色加粗
                PS1='\[\e[1;35m\]\u@\h\[\e[0m\]:\[\e[0m\]\w\[\e[0m\]\$ \[\e[1;36m\]'
2025-11-22 16:00

LINUX 加固

作为 Linux 服务器维护管理人员,**安全是日常工作的重中之重**,需要从系统加固、权限管理、网络防护、数据安全、日志审计、漏洞修复、应急响应等多个维度构建纵深防御体系。以下是 Linux 安全的核心做法,结合实操命令和配置示例,覆盖从基础加固到高级防护的全流程:

一、系统基础加固:从源头减少攻击面

1. 操作系统最小化安装

  • 核心原则:只安装必要的组件和服务,禁用无用功能(如图形界面、多余的网络服务、开发工具),减少潜在漏洞。

  • 实操

    • 安装时选择「最小安装」模式(如 CentOS/RHEL 的 Minimal 选项,Ubuntu 的 server 版)。

    • 安装后清理无用包:

      # CentOS/RHEL
      yum remove -y xorg-x11* gnome* kde*  # 卸载图形界面
      yum autoremove -y                    # 自动清理依赖
      
      # Ubuntu/Debian
      apt-get remove -y xserver-xorg* gnome* kde*
      apt-get autoremove -y

2. 及时更新系统补丁

  • 核心原则:定期更新内核、系统库和应用程序,修复已知漏洞(尤其是高危漏洞,如 Heartbleed、Shellshock、Spectre/Meltdown 等)。

  • 实操

    • 配置自动更新(推荐生产环境谨慎使用,测试环境可开启):

      # CentOS/RHEL 7+
      yum install -y yum-cron
      systemctl enable --now yum-cron
      
      # Ubuntu/Debian
      apt-get install -y unattended-upgrades
      dpkg-reconfigure -plow unattended-upgrades  # 交互式配置自动更新
    • 手动更新(生产环境建议先测试补丁兼容性):

      # CentOS/RHEL
      yum update -y  # 更新所有包(包括内核)
      yum update -y --exclude=kernel*  # 不更新内核(如需保持内核版本)
      
      # Ubuntu/Debian
      apt-get update && apt-get upgrade -y
  • 注意:内核更新后需重启服务器生效,生产环境建议在维护窗口执行,并提前备份数据。

3. 禁用不必要的服务

  • 核心原则:只保留业务必需的服务(如 Nginx、MySQL、SSH),禁用所有无关服务(如 telnet、ftp、rpcbind、cups 等),减少监听端口。

  • 实操

    • 查看当前运行的服务:

      # CentOS/RHEL 7+
      systemctl list-unit-files --type=service --state=enabled
      
      # Ubuntu/Debian
      systemctl list-services --type=service --state=running
    • 禁用无用服务:

      # 示例:禁用 telnet、ftp、rpcbind 服务
      systemctl disable --now telnet.socket vsftpd rpcbind

4. 限制系统核心参数(sysctl 配置)

  • 核心原则:通过调整内核参数,增强系统对网络攻击、内存溢出、文件系统滥用的防护能力。

  • 实操:编辑 /etc/sysctl.conf 文件,添加/修改以下参数,然后执行 sysctl -p 生效:

    # 禁止 IP 转发(非路由服务器禁用)
    net.ipv4.ip_forward = 0
    
    # 禁用 ICMP 重定向(防止中间人攻击)
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.default.accept_redirects = 0
    
    # 启用 TCP SYN Cookie(防御 SYN 洪水攻击)
    net.ipv4.tcp_syncookies = 1
    
    # 限制 SYN 半连接队列大小
    net.ipv4.tcp_max_syn_backlog = 1024
    
    # 防止 TCP 连接被劫持
    net.ipv4.tcp_seq_file = /proc/net/tcp_seq
    
    # 禁用 IPv6(如不使用)
    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    
    # 限制文件句柄数量(防止 DoS 攻击)
    fs.file-max = 65535
    
    # 启用内存保护(防止缓冲区溢出)
    kernel.randomize_va_space = 2  # 开启地址空间随机化

二、账户与权限管理:守住“访问入口”

1. 禁用 root 远程登录

  • 核心原则:root 是系统最高权限账户,直接远程登录风险极高,应禁用并通过普通用户+sudo 授权管理。
  • 实操
    • 编辑 SSH 配置文件 /etc/ssh/sshd_config
      PermitRootLogin no  # 禁用 root 远程登录
      AllowUsers admin user1  # 只允许指定普通用户登录(可选,增强限制)
    • 重启 SSH 服务生效:
      systemctl restart sshd  # CentOS/RHEL 7+
      systemctl restart ssh   # Ubuntu/Debian

2. 创建并授权普通用户

  • 核心原则:为管理员和运维人员创建独立普通用户,通过 sudo 分配必要权限,避免直接使用 root。
  • 实操
    • 创建普通用户:
      useradd -m -s /bin/bash admin  # 创建 admin 用户,生成家目录,指定 bash  shell
      passwd admin  # 为 admin 设置强密码(长度≥8位,包含大小写、数字、特殊字符)
    • 授予 sudo 权限:
      usermod -aG wheel admin  # CentOS/RHEL(wheel 组默认拥有 sudo 权限)
      usermod -aG sudo admin   # Ubuntu/Debian(sudo 组默认拥有 sudo 权限)
    • 限制 sudo 权限范围(可选,最小权限原则):
      visudo  # 编辑 sudoers 文件(避免直接编辑 /etc/sudoers)
      # 添加以下内容,仅允许 admin 用户执行指定命令(如重启、管理服务)
      admin  ALL=(ALL)  NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/reboot

3. 强制设置强密码策略

  • 核心原则:防止弱密码被暴力破解,强制用户使用复杂密码,并定期更换。

  • 实操

    • 安装密码策略工具:

      # CentOS/RHEL
      yum install -y pam_cracklib
      
      # Ubuntu/Debian
      apt-get install -y libpam-cracklib
    • 编辑 PAM 配置文件 /etc/pam.d/system-auth(CentOS/RHEL)或 /etc/pam.d/common-password(Ubuntu/Debian):

      # CentOS/RHEL:在 password sufficient pam_unix.so 行后添加
      password  requisite  pam_cracklib.so minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 retry=3
      
      # Ubuntu/Debian:修改 password [success=1 default=ignore] pam_unix.so 行
      password  [success=1 default=ignore]  pam_unix.so obscure sha512 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
    • 参数说明:minlen=8(最小长度8)、ucredit=-1(至少1个大写)、lcredit=-1(至少1个小写)、dcredit=-1(至少1个数字)、ocredit=-1(至少1个特殊字符)、retry=3(最多重试3次)。

4. 清理无用账户和密钥

  • 核心原则:定期审计系统账户,删除离职人员、测试用的无用账户,清理未授权的 SSH 密钥。
  • 实操
    • 列出所有用户:
      cat /etc/passwd | grep -v nologin | grep -v false  # 过滤系统账户,查看可登录用户
    • 删除无用账户:
      userdel -r olduser  # -r 同时删除用户家目录
    • 清理 SSH 密钥:检查所有用户的 ~/.ssh/authorized_keys 文件,删除未授权的公钥。

5. 限制 SSH 登录(密钥认证+端口修改)

  • 核心原则:SSH 是远程管理的主要入口,需通过“修改默认端口+禁用密码登录+限制登录 IP”增强防护。

  • 实操

      1. 修改 SSH 默认端口(避免暴力破解扫描 22 端口):
        vim /etc/ssh/sshd_config
        Port 2222  # 将默认 22 端口改为自定义端口(如 2222,建议 10000+)
      1. 禁用密码登录,强制使用 SSH 密钥认证:
        vim /etc/ssh/sshd_config
        PasswordAuthentication no  # 禁用密码登录
        PubkeyAuthentication yes   # 启用密钥认证
      1. 配置 SSH 密钥(客户端生成,上传到服务器):
        
        # 客户端生成密钥对(本地执行)
        ssh-keygen -t rsa -b 4096  # 生成 4096 位 RSA 密钥(默认存放在 ~/.ssh/id_rsa)

      上传公钥到服务器(客户端执行)

      ssh-copy-id -p 2222 admin@服务器IP # 把公钥复制到服务器 admin 用户的 ~/.ssh/authorized_keys

      1. 限制 SSH 登录 IP(可选,仅允许指定 IP 访问):
        
        # 方法1:SSH 配置文件限制
        vim /etc/ssh/sshd_config
        AllowUsers admin@192.168.1.0/24  # 仅允许 192.168.1.0/24 网段的 admin 用户登录

      方法2:防火墙限制(推荐,更灵活)

      CentOS/RHEL 7+(firewalld)

      firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="2222" accept' firewall-cmd --reload

      Ubuntu/Debian(ufw)

      ufw allow from 192.168.1.0/24 to any port 2222 ufw enable

      1. 重启 SSH 服务生效:systemctl restart sshd

三、网络安全:防护“外部入侵通道”

1. 配置防火墙(默认拒绝,仅开放必要端口)

  • 核心原则:防火墙是网络防护的第一道屏障,采用“默认拒绝所有,只开放必要端口”的策略,限制入站和出站流量。

  • 实操

    • 选择防火墙工具(CentOS/RHEL 7+ 用 firewalld,Ubuntu/Debian 用 ufw,或通用 iptables):

      # 示例1:CentOS/RHEL 7+(firewalld)
      # 查看当前开放端口
      firewall-cmd --list-ports
      
      # 开放必要端口(如 SSH 2222、HTTP 80、HTTPS 443)
      firewall-cmd --permanent --add-port=2222/tcp
      firewall-cmd --permanent --add-port=80/tcp
      firewall-cmd --permanent --add-port=443/tcp
      
      # 禁止所有其他入站流量(默认策略)
      firewall-cmd --permanent --set-default-zone=drop
      firewall-cmd --reload
      
      # 示例2:Ubuntu/Debian(ufw)
      # 重置防火墙(可选,清理原有规则)
      ufw reset
      
      # 开放必要端口
      ufw allow 2222/tcp
      ufw allow 80/tcp
      ufw allow 443/tcp
      
      # 启用防火墙(默认拒绝入站,允许出站)
      ufw enable
      ufw status
      
      # 示例3:通用 iptables(适合复杂规则)
      # 清空原有规则
      iptables -F
      iptables -X
      
      # 允许回环接口
      iptables -A INPUT -i lo -j ACCEPT
      
      # 允许已建立的连接
      iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
      
      # 开放必要端口
      iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
      iptables -A INPUT -p tcp --dport 80 -j ACCEPT
      iptables -A INPUT -p tcp --dport 443 -j ACCEPT
      
      # 默认拒绝所有入站流量
      iptables -P INPUT DROP
      
      # 保存规则(CentOS/RHEL)
      service iptables save
      # 保存规则(Ubuntu/Debian)
      iptables-save > /etc/iptables/rules.v4

2. 禁用不安全的网络服务和协议

  • 核心原则:禁用 telnet、ftp、rsh、rcp 等明文传输协议,改用 SSH、SFTP、SCP 等加密协议。

  • 实操

    • 检查并禁用不安全服务:

      # 查看是否安装 telnet/ftp
      rpm -q telnet-server vsftpd  # CentOS/RHEL
      dpkg -l | grep -E 'telnet|ftp'  # Ubuntu/Debian
      
      # 卸载不安全服务
      yum remove -y telnet-server vsftpd  # CentOS/RHEL
      apt-get remove -y telnet vsftpd  # Ubuntu/Debian
    • 禁用 IPv6(如不使用):参考「一、4」的 sysctl 配置。

3. 配置网络访问控制(ACL/hosts.allow)

  • 核心原则:通过 TCP Wrappers 或文件系统 ACL 限制特定服务的访问权限,实现“白名单”控制。

  • 实操

      1. TCP Wrappers 配置(限制 SSH、vsftpd 等支持的服务):
        
        # 编辑 /etc/hosts.allow(允许访问的 IP/网段)
        sshd: 192.168.1.0/24, 10.0.0.0/8
        vsftpd: 192.168.1.100  # 仅允许 192.168.1.100 访问 FTP(如必须使用)

      编辑 /etc/hosts.deny(默认拒绝所有)

      ALL: ALL

      1. 文件系统 ACL(限制敏感目录的访问):
        
        # 为 /etc/shadow 设置 ACL,仅 root 可读写
        setfacl -m u:root:rw- /etc/shadow
        setfacl -m g:root:r-- /etc/shadow
        setfacl -m o::- /etc/shadow

      查看 ACL 设置

      getfacl /etc/shadow

4. 防御 DDoS 攻击(基础措施)

  • 核心原则:通过限制连接数、SYN 队列、请求频率等参数,缓解常见 DDoS 攻击(如 SYN 洪水、CC 攻击)。

  • 实操

      1. 调整 TCP 连接参数(sysctl 配置,补充「一、4」):
        
        # 限制每个 IP 的最大连接数(CentOS/RHEL 需安装 iptables-extensions)
        iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 100 -j DROP  # 单个 IP 最多 100 个 HTTP 连接

      限制 SYN 包发送频率

      iptables -A INPUT -p tcp --syn -m limit --limit 10/s --limit-burst 20 -j ACCEPT iptables -A INPUT -p tcp --syn -j DROP

      1. 安装 DDoS 防护工具(如 fail2ban,防御暴力破解):
        
        # 安装 fail2ban
        yum install -y fail2ban  # CentOS/RHEL
        apt-get install -y fail2ban  # Ubuntu/Debian

      配置 fail2ban(以 SSH 为例)

      vim /etc/fail2ban/jail.local [sshd] enabled = true port = 2222 # 对应 SSH 自定义端口 filter = sshd logpath = /var/log/secure # CentOS/RHEL 日志路径

      logpath = /var/log/auth.log # Ubuntu/Debian 日志路径

      maxretry = 3 # 失败 3 次 bantime = 3600 # 封禁 1 小时

      启动 fail2ban

      systemctl enable --now fail2ban

四、数据安全:保护“核心资产”

1. 定期备份重要数据

  • 核心原则:数据是企业核心资产,需制定“定期备份+异地备份+测试恢复”的策略,防止数据丢失(如硬件故障、勒索病毒)。

  • 实操

      1. 确定备份内容:/etc(系统配置)、/home(用户数据)、/var/www(Web 数据)、数据库文件(MySQL/MariaDB 等)。
      1. 使用 rsynctar 进行本地备份:
        
        # 示例:用 tar 备份 /etc 和 /home 到 /backup
        mkdir -p /backup
        tar -czvf /backup/system_backup_$(date +%Y%m%d).tar.gz /etc /home

      示例:用 rsync 同步到异地备份服务器

      rsync -avz -e 'ssh -p 2222' /backup admin@备份服务器IP:/remote_backup

      1. 配置定时备份(crontab):
        crontab -e  # 编辑定时任务
        # 每天凌晨 2 点执行备份
        0 2 * * * /usr/bin/tar -czvf /backup/system_backup_$(date +%Y%m%d).tar.gz /etc /home
        # 每周日凌晨 3 点同步到异地
        0 3 * * 0 /usr/bin/rsync -avz -e 'ssh -p 2222' /backup admin@备份服务器IP:/remote_backup
      1. 测试备份恢复:定期从备份文件中恢复部分数据,验证备份的可用性。

2. 数据加密(传输+存储)

  • 核心原则:敏感数据(如密码、财务数据)需在传输和存储环节加密,防止泄露。

  • 实操

      1. 传输加密:
      • SSH/SCP/SFTP 替代 telnet/ftp(已在「二、5」配置)。

      • Web 服务启用 HTTPS(Let's Encrypt 免费证书):

        # 安装 Certbot
        yum install -y certbot python3-certbot-nginx  # CentOS/RHEL + Nginx
        apt-get install -y certbot python3-certbot-nginx  # Ubuntu/Debian + Nginx
        
        # 自动获取并配置证书
        certbot --nginx -d example.com -d www.example.com
      1. 存储加密:
      • 敏感文件加密(如数据库配置、密钥文件):

        # 用 gpg 加密文件
        gpg -c /etc/my.cnf  # 生成 my.cnf.gpg 加密文件,删除原文件
        
        # 解密文件
        gpg /etc/my.cnf.gpg
      • 文件系统加密(如 LUKS 加密分区):

        # 对 /dev/sdb1 进行 LUKS 加密
        cryptsetup luksFormat /dev/sdb1
        cryptsetup open /dev/sdb1 encrypted_partition
        mkfs.ext4 /dev/mapper/encrypted_partition
        mount /dev/mapper/encrypted_partition /data  # 挂载加密分区

3. 限制敏感文件权限

  • 核心原则:敏感文件(如 /etc/passwd/etc/shadow/etc/sudoers)仅允许 root 访问,防止非授权读取或修改。

  • 实操

    • 检查并修复敏感文件权限:

      # /etc/shadow:仅 root 读写
      chmod 0000 /etc/shadow
      chown root:root /etc/shadow
      
      # /etc/passwd:root 读写,其他只读
      chmod 0644 /etc/passwd
      chown root:root /etc/passwd
      
      # /etc/sudoers:仅 root 读写
      chmod 0440 /etc/sudoers
      chown root:root /etc/sudoers
    • 查找并处理世界可写的文件(安全隐患):

      find / -perm -0002 -type f -not -path "/proc/*" -not -path "/sys/*"  # 查找世界可写文件
      chmod o-w 文件名  # 移除其他用户的写权限

五、日志审计:及时发现“异常行为”

1. 开启并集中管理日志

  • 核心原则:系统日志是安全审计的重要依据,需开启所有关键服务的日志(如 SSH、Web、数据库),并集中存储(避免日志被篡改)。

  • 实操

      1. 配置系统日志(rsyslog/journald):
        
        # CentOS/RHEL 7+(rsyslog)
        vim /etc/rsyslog.conf
        # 确保以下配置启用(记录 auth、cron、mail、kern 等日志)
        authpriv.*              /var/log/secure
        cron.*                  /var/log/cron
        mail.*                  -/var/log/maillog
        kern.*                  -/var/log/kern.log

      重启 rsyslog

      systemctl restart rsyslog

      Ubuntu/Debian(rsyslog 默认启用)

      vim /etc/rsyslog.d/50-default.conf

      确保 auth.log、syslog 等日志配置正确

      1. 集中日志管理(ELK 栈示例):
      • 安装 Elasticsearch、Logstash、Kibana,将所有服务器日志同步到 Logstash,存储到 Elasticsearch,通过 Kibana 可视化分析。
      • 简单方案:用 rsync 定期同步日志到日志服务器,或使用 syslog-ng 实时转发。

2. 监控异常日志(关键词告警)

  • 核心原则:通过脚本或工具监控日志中的敏感关键词(如 Failed passwordroot logininvalid usererror),及时发现暴力破解、异常登录等行为。

  • 实操

      1. 简单脚本监控 SSH 暴力破解(结合 fail2ban 更佳):
        
        # 编辑监控脚本 /usr/local/bin/ssh_monitor.sh
        #!/bin/bash
        LOG_FILE="/var/log/secure"
        KEYWORD="Failed password"
        ALERT_EMAIL="admin@example.com"

      统计近 1 小时内的失败次数

      FAIL_COUNT=$(grep "$(date +%Y-%m-%d) $(date -d '1 hour ago' +%H):" $LOG_FILE | grep "$KEYWORD" | wc -l)

      if [ $FAIL_COUNT -gt 10 ]; then echo "SSH 暴力破解告警:近 1 小时失败 $FAIL_COUNT 次" | mail -s "SSH 安全告警" $ALERT_EMAIL fi

      添加到 crontab,每小时执行一次

      crontab -e 0 /usr/local/bin/ssh_monitor.sh

      1. 工具监控:fail2ban 自动封禁暴力破解 IP,ossec 支持日志分析和实时告警。

六、漏洞防护:主动“修复潜在风险”

1. 定期漏洞扫描

  • 核心原则:使用工具扫描系统和应用的漏洞,优先修复高危漏洞(CVSS 评分 ≥7.0)。

  • 实操

      1. 系统漏洞扫描:
        
        # CentOS/RHEL:用 yum-security 检查漏洞
        yum install -y yum-plugin-security
        yum updateinfo list vuln  # 列出所有漏洞
        yum updateinfo list vuln --sec-severity=Critical  # 仅列出高危漏洞

      Ubuntu/Debian:用 apt-show-versions 检查

      apt-get install -y apt-show-versions apt-show-versions -u # 列出可升级的包(含漏洞修复)

      1. 应用漏洞扫描:
      • 使用 nmap 扫描端口和服务版本,识别已知漏洞:nmap -sV -p- 服务器IP
      • 使用 openvasnessus 进行深度漏洞扫描(需安装配置)。
      • Web 应用扫描:nikto(扫描 Web 服务器漏洞)、sqlmap(检测 SQL 注入)。

2. 应用安全加固

  • 核心原则:除系统漏洞外,应用程序(如 Nginx、MySQL、PHP)的配置漏洞是主要攻击入口,需针对性加固。

  • 实操

      1. Nginx 安全加固:
        
        # 编辑 nginx.conf
        vim /etc/nginx/nginx.conf
        # 添加安全头部
        add_header X-Content-Type-Options "nosniff" always;
        add_header X-Frame-Options "DENY" always;
        add_header X-XSS-Protection "1; mode=block" always;
        add_header Content-Security-Policy "default-src 'self'" always;

      禁用不必要的模块

      编译时:./configure --without-http_autoindex_module --without-http_ssi_module

      运行时:在 nginx.conf 中注释掉 load_module 指令

      限制请求体大小(防止 DoS 攻击)

      client_max_body_size 10M;

      重启 Nginx

      systemctl restart nginx

      1. MySQL 安全加固:
        
        # 执行安全脚本(MySQL 5.7+ 内置)
        mysql_secure_installation
        # 按提示设置 root 密码、删除匿名用户、禁用 root 远程登录、删除 test 数据库

      编辑 my.cnf

      vim /etc/my.cnf

      禁用本地文件访问(防止 SQL 注入读取系统文件)

      secure_file_priv = ""

      限制连接数

      max_connections = 1000

      重启 MySQL

      systemctl restart mysqld

      1. PHP 安全加固:
        
        # 编辑 php.ini
        vim /etc/php.ini
        # 禁用危险函数
        disable_functions = eval,exec,passthru,shell_exec,system
        # 限制文件上传大小
        upload_max_filesize = 2M
        # 开启魔术引号(防止 SQL 注入,PHP 5.4+ 已移除,需手动过滤)
        magic_quotes_gpc = On
        # 禁用暴露 PHP 版本
        expose_php = Off

      重启 Web 服务

      systemctl restart nginx

七、应急响应:快速“处置安全事件”

1. 制定应急响应计划(IRP)

  • 核心原则:提前制定安全事件的处理流程,明确责任人、响应步骤、沟通机制,避免事件扩大。
  • 关键内容
    • 事件分类:如暴力破解、数据泄露、病毒入侵、DDoS 攻击。
    • 响应步骤:发现 → 控制 → 消除 → 恢复 → 总结。
    • 联系方式:安全团队、运维团队、业务团队、外部应急响应机构。

2. 入侵后的处置步骤

  • 核心原则:一旦发现入侵,立即隔离受影响系统,保留证据,快速清除威胁,恢复业务。
  • 实操步骤
    1. 隔离系统:断开网络(物理断开或防火墙阻断),防止攻击扩散。
    2. 保留证据:备份日志(/var/log/*)、内存镜像(dd if=/dev/mem of=/backup/mem_dump.img)、恶意文件(如 /tmp/unknown)。
    3. 清除威胁
      • 终止恶意进程:ps -ef | grep 恶意进程名kill -9 进程ID
      • 删除恶意文件:rm -f 恶意文件路径
      • 修复漏洞:更新系统和应用,重新配置安全参数。
    4. 恢复业务:在清理后的系统上恢复数据(从备份),测试服务可用性,逐步恢复网络连接。
    5. 事后总结:分析入侵原因,优化安全策略,避免再次发生。

八、持续安全:构建“长效防御体系”

  • 定期安全审计:每季度/半年进行一次全面安全检查,包括系统配置、权限、日志、漏洞等。
  • 安全培训:对运维人员进行安全知识培训,如弱密码危害、钓鱼邮件识别、应急处置流程。
  • 关注安全动态:订阅 CVE 漏洞库、厂商安全公告(如 RedHat、Ubuntu 安全邮件),及时了解最新威胁。
  • 自动化运维:使用 Ansible、SaltStack 等工具批量管理服务器,确保安全配置的一致性(如统一 SSH 配置、防火墙规则)。

总结

Linux 安全是一个“持续迭代”的过程,没有一劳永逸的方案。核心是围绕「最小攻击面、最小权限、数据加密、日志审计、快速响应」五大原则,从系统、账户、网络、数据、应用等多个层面构建防御体系,并定期演练和优化。以上做法覆盖了 90% 以上的常见安全风险,可根据企业实际业务场景(如生产环境、测试环境)和合规要求(如等保 2.0)进行调整和深化。

2025-11-21 13:08

用友T+Plus 表 之间的勾兑关系

## 用友T+Plus账套与表结构详解

一、账套的核心意义

账套是用友T+Plus中存储企业完整业务与财务数据的独立数据集合,相当于企业的"数字账本",具有三大核心功能:

  1. 数据隔离与独立核算:支持创建多个账套,区分不同业务板块、子公司或项目,各账套拥有独立的会计期间、科目体系和初始余额,实现数据互不干扰的精准核算

  2. 数据安全与权限控制:通过账套密码和角色权限,限制不同人员的操作范围(如财务只能操作财务模块),支持数据备份与恢复,防止数据丢失

  3. 业务流程管理载体:完整记录从采购、销售到财务核算的全流程数据,支持凭证处理、报表生成和业务分析,满足企业多维度管理需求

核心表:EAP_ACCOUNT(账套信息表),存储账套号、名称、启用年度等关键信息

二、表的分类与作用

用友T+Plus中的表分为两大类:

1. 系统基础表

存储系统配置、基础档案和编码规则,是整个系统运行的基础:

表类别 代表表 主要功能
基础档案 AA_Account(科目表)
AA_Vendor(供应商表)
AA_Customer(客户表)
存储科目编码、供应商/客户基本信息,为业务单据提供参照依据
系统配置 EAP_OperationLog(操作日志表)
DSign(凭证类别表)
记录操作轨迹、定义凭证类型,支持系统审计和异常追踪
存货基础 InventoryClass(存货分类表)
Inventory(存货档案表)
建立存货分类体系,记录存货编码、名称、规格等基础属性,是库存和存货核算的基础

2. 业务财务表

存储企业日常经营数据,是模块间数据流转的核心:

模块 核心表 用途
采购管理 PO_Pomain(采购订单主表)
PO_Podetails(采购订单子表)
记录采购订单头信息和明细,通过cPOID字段关联,主表存储表头,子表存储行项目
库存管理 ST_RDRecord(出入库主表)
ST_RDRecords(出入库子表)
记录所有出入库业务,通过iType区分业务类型(II-采购入库、IO-销售出库、MD-材料出库等)
存货核算 IA_Subsidiary(存货明细账)
IA_Summary(存货总账)
记录存货的收发存数量和金额,计算存货成本,是财务核算的重要数据源
财务管理 GL_AccVouch(凭证明细表)
GL_AccSum(科目总账表)
存储凭证详细信息和科目汇总数据,是生成财务报表的基础

三、核心环节表对应关系详解

1. 采购环节表关联

完整流程:采购计划 → 采购订单 → 进货单 → 采购入库单 → 采购发票 → 付款

业务环节 操作单据 核心表及关联关系 财务影响
采购订货 采购订单 PO_Pomain(主表) ↔ PO_Podetails(子表)
cPOID字段关联
→ PP_PU(采购计划-采购单关联表)
记录采购意向,不影响财务账
采购收货 采购入库单 ST_RDRecord(iType=II) ↔ ST_RDRecords
iBillNo关联采购订单号
→ PU_LeftSum(采购余额表)
增加库存,暂估应付款(票未到)
采购结算 进货单/采购发票 AP_Vouch(应付单主表) ↔ AP_Vouchs(子表)
与ST_RDRecord通过iBillNo关联
→ AP_Sum(应付总账表)
确认应付账款,记录进项税
付款核销 付款单 AP_CloseBill(付款核销表)
关联AP_Vouch和银行日记账
→ GL_AccVouch(凭证表)
减少应付账款,减少银行存款

关键勾兑:采购入库单(ST_RDRecord)与进货单(AP_Vouch)通过iBillNo关联,确保"货票一致",生成凭证:

  • 暂估入库:借:库存商品 贷:暂估应付款
  • 发票到:借:暂估应付款 应交税费-进项税 贷:应付账款

2. 销售环节表关联

完整流程:销售订单 → 销货单 → 销售出库单 → 销售发票 → 收款

业务环节 操作单据 核心表及关联关系 财务影响
销售订货 销售订单 SO_SODetails(销售订单表) 记录销售意向,不影响财务账
销售发货 销售出库单 ST_RDRecord(iType=IO) ↔ ST_RDRecords
与SO_SODetails通过订单号关联
→ 当前库存量表(减少)
减少库存数量,不影响财务账
销售结算 销货单/销售发票 SaleBillVouch(销售发票主表) ↔ SaleBillVouchs(子表)
与ST_RDRecord通过iBillNo关联
→ AR_Sum(应收总账表)
确认销售收入和销项税,增加应收账款
收款核销 收款单 AR_CloseBill(收款核销表)
关联SaleBillVouch和银行日记账
→ GL_AccVouch(凭证表)
减少应收账款,增加银行存款

关键勾兑:销售出库单(ST_RDRecord)与销货单(SaleBillVouch)通过iBillNo关联,确保"货票一致",生成凭证:

  • 确认收入:借:应收账款 贷:主营业务收入 应交税费-销项税
  • 结转成本:借:主营业务成本 贷:库存商品(从IA_Subsidiary取单价)

3. 生产环节表关联

完整流程:生产订单 → 材料出库 → 产成品入库 → 成本核算

业务环节 操作单据 核心表及关联关系 财务影响
生产准备 生产加工单 ME_Order(生产订单表) 记录生产计划,关联销售订单号
领料 材料出库单 ST_RDRecord(iType=MD) ↔ ST_RDRecords
与ME_Order通过生产订单号关联
→ IA_Subsidiary(减少材料库存)
减少原材料库存,增加生产成本-直接材料
完工入库 产成品入库单 ST_RDRecord(iType=MC) ↔ ST_RDRecords
与ME_Order通过生产订单号关联
→ IA_Subsidiary(增加产成品库存)
增加产成品库存,减少生产成本,完成成本结转
成本核算 成本分配单 CA_CostCD(费用明细定义表)
CA_AllMt(分配率表)
归集材料、人工和制造费用,计算产品单位成本

关键勾兑

  • 材料出库单与生产订单关联,将材料成本计入生产成本
  • 产成品入库单与生产订单关联,触发成本自动结转: 借:库存商品 贷:生产成本-直接材料/直接人工/制造费用

4. 库存管理环节表关联

主要业务:盘点、调拨、其他出入库

业务类型 操作单据 核心表及关联关系 财务影响
盘点业务 盘点单(CheckVouch) CheckVouch(盘点主表) ↔ CheckVouchs(盘点子表)
→ ST_RDRecord(生成盘盈/盘亏出入库单)
盘盈:借:库存商品 贷:待处理财产损溢
盘亏:相反分录
调拨业务 调拨单(TransVouch) TransVouch(调拨主表) ↔ TransVouchs(调拨子表)
→ ST_TransSourceRelation(调拨来源关系表)
→ ST_RDRecord(生成其他出入库单)
调整库存分布,不影响总成本,只改变仓库归属
其他出入库 其他入库单/出库单 ST_RDRecord(iType=IC/ID) ↔ ST_RDRecords 按业务性质确定财务影响(如赠品出库计入销售费用)

关键勾兑:盘点单审核后自动生成出入库单,更新库存数量,并通过存货核算模块生成财务凭证,确保账实一致

5. 财务核算环节表关联

核心流程:凭证录入 → 记账 → 结账 → 报表生成

核算环节 操作/报表 核心表及关系 数据来源
凭证处理 凭证录入/审核 GL_AccVouch(凭证明细表) 手工录入或业务单据自动生成,记录借贷方科目、金额和摘要
记账 凭证记账 GL_AccVouch → GL_AccSum(科目总账表)
→ GL_Accass(辅助总账表)
将凭证明细汇总到科目总账和辅助核算账,为报表提供数据基础
期末处理 自动转账/结账 GL_mpostcond(记账条件表)
GL_mend(结账状态表)
定义转账规则,记录各模块结账状态,控制结账顺序(上月未结,本月不能结)
财务报表 资产负债表/利润表 取数公式关联GL_AccSum和IA_Summary等 资产负债表"未分配利润"期末-期初 = 利润表"净利润"累计,确保报表勾稽关系

关键勾兑

  • 业务单据(如采购入库单)自动生成凭证,确保业务与财务数据一致
  • 科目总账(GL_AccSum)与明细账(GL_AccVouch)通过科目编码关联,实现账账相符
  • 财务报表通过预设公式从总账取数,确保报表间勾稽关系(如资产=负债+所有者权益)

四、模块间数据流转全景

用友T+Plus通过关键关联字段实现模块间数据无缝流转,形成完整业务闭环:

1. 采购-库存-财务联动

采购订单(PO_Pomain) → 进货单(AP_Vouch) → 采购入库单(ST_RDRecord:iType=II) → 
存货核算(IA_Subsidiary) → 凭证(GL_AccVouch:借库存商品,贷应付账款)

核心关联:进货单与采购入库单通过iBillNo关联,确保"票货一致";存货核算根据入库单计算成本并生成凭证

2. 销售-库存-财务联动

销售订单(SO_SODetails) → 销货单 → 销售出库单(ST_RDRecord:iType=IO) → 
存货核算(IA_Subsidiary) → 凭证(GL_AccVouch:借应收账款,贷收入;借成本,贷库存商品)

核心关联:销货单与销售出库单通过iBillNo关联,确保销售数量一致;存货核算根据出库单结转销售成本

3. 生产-库存-财务联动

生产订单(ME_Order) → 材料出库单(ST_RDRecord:iType=MD) → 
产成品入库单(ST_RDRecord:iType=MC) → 存货核算 → 
凭证(借生产成本,贷原材料;借库存商品,贷生产成本)

核心关联:材料出库单和产成品入库单均与生产订单关联,确保生产过程的材料消耗和成品产出准确归集到对应生产订单,实现成本精准核算

4. 财务报表数据来源

GL_AccSum(科目总账) → 资产负债表/利润表
IA_Summary(存货总账) → 资产负债表"存货"项目
AP_Sum/AR_Sum(往来总账) → 资产负债表"应付账款/应收账款"项目

关键勾稽

  • 资产负债表"未分配利润"期末数 - 期初数 = 利润表"净利润"本年累计数
  • 总账"应收账款"余额 = 销售模块"应收单/销售发票"未核销余额,确保账账相符

五、常见问题与排查方向

使用用友T+Plus时,数据不一致问题通常源于表间关联异常,可从以下方向排查:

  1. 采购暂估差异:采购入库单与进货单数量或金额不一致,导致暂估回冲异常

    • 排查ST_RDRecord与AP_Vouch的iBillNo关联,检查是否存在未匹配的入库单或发票
  2. 销售成本结转错误:发出商品成本与实际成本不符

    • 检查ST_RDRecord(销售出库)与IA_Subsidiary(存货明细账)的成本取数关系,确认计价方式是否正确
  3. 账实不符:库存账面数与实物不一致

    • 通过盘点单核对Inventory表与ST_RDRecord的结存数量,检查是否有未审核的出入库单或盘点调整未生成凭证
  4. 报表勾稽关系破坏:资产负债表与利润表数据不衔接

    • 检查GL_AccSum中"本年利润"科目与利润表的取数关系,确认期间损益结转是否完整

总结

用友T+Plus通过表间精准关联实现了业务财务一体化管理,每个业务环节都有对应的表结构记录,并通过关键字段(如iBillNo、cPOID)与上下游表连接,形成完整的数据链。理解这种表对应关系,有助于管理员更精准地进行数据维护、问题排查和系统优化,确保企业数字化管理的高效运行。

下一步建议:结合企业实际业务场景,绘制专属的数据流向图,明确各环节表关联,为系统维护和二次开发提供清晰指引。

2025-11-21 10:46

Markdown 命令

Markdown 是一种轻量级标记语言,语法简洁直观,常用于编写文档、笔记、博客等。以下是 常用 Markdown 语法命令,按功能分类整理,附带示例和效果说明:

一、标题(Heading)

通过 # 符号表示不同级别标题,# 数量越多,标题级别越低(共 6 级)。
语法

# 一级标题(最大)
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题(最小)

效果

一级标题(最大)

二级标题

三级标题

四级标题

五级标题
六级标题(最小)

二、文本格式(Text Formatting)

用于设置文本的加粗、斜体、删除线等样式。

语法 效果 说明
*斜体文本* 斜体文本 单个 *_ 包裹
_斜体文本_ 斜体文本
**加粗文本** 加粗文本 两个 *_ 包裹
__加粗文本__ 加粗文本
***加粗斜体*** 加粗斜体 三个 * 包裹
~~删除线文本~~ 删除线文本 两个 ~ 包裹
==高亮文本== ==高亮文本== 两个 = 包裹(部分编辑器支持)
^上标^ ^上标^ 单个 ^ 包裹(部分编辑器支持)
~下标~ ~下标~ 单个 ~ 包裹(部分编辑器支持)

示例

这是 *斜体*,这是 **加粗**,这是 ***加粗斜体***,这是 ~~删除线~~。  
H<sub>2</sub>O(水的化学式),2<sup>2</sup>=4(平方)。

三、段落与换行(Paragraph & Line Break)

Markdown 中,段落之间需空一行;若想在同一段落内换行,可在末尾加 两个及以上空格 后回车。

语法

这是第一个段落。(回车后空一行)

这是第二个段落。  
这是同一段落内的换行(末尾加了两个空格)。

效果
这是第一个段落。(回车后空一行)

这是第二个段落。
这是同一段落内的换行(末尾加了两个空格)。

四、列表(List)

支持有序列表(带编号)和无序列表(带符号),可嵌套使用。

1. 无序列表

*+- 作为列表项前缀,符号可互换。
语法

- 列表项 1
- 列表项 2
  - 嵌套列表项 2.1(前加 2 个空格)
  - 嵌套列表项 2.2
+ 列表项 3(用 + 也可以)
* 列表项 4(用 * 也可以)

效果

  • 列表项 1
  • 列表项 2
    • 嵌套列表项 2.1(前加 2 个空格)
    • 嵌套列表项 2.2
  • 列表项 3(用 + 也可以)
  • 列表项 4(用 * 也可以)

2. 有序列表

用数字加 . 作为前缀,编号自动递增(即使手动写乱,渲染后也会按顺序排列)。
语法

1. 第一步
2. 第二步
   1. 第二步的子步骤 1(前加 2 个空格)
   2. 第二步的子步骤 2
3. 第三步

效果

  1. 第一步
  2. 第二步
    1. 第二步的子步骤 1(前加 2 个空格)
    2. 第二步的子步骤 2
  3. 第三步

五、链接(Link)

用于插入网页链接、本地文件链接等,支持自定义显示文本。

1. 基础链接

语法

[显示文本](链接地址 "可选标题,hover 时显示")

示例

[GitHub 官网](https://github.com "GitHub - 全球最大的代码托管平台")

效果
GitHub 官网

2. 引用式链接(适合长链接或重复使用)

先定义链接标识,再在文末统一指定链接地址。
语法

[显示文本][链接标识]

<!-- 文末定义链接地址 -->
[链接标识]: 链接地址 "可选标题"

示例

我常用的代码托管平台是 [GitHub][1] 和 [Gitee][2]。

[1]: https://github.com "GitHub"
[2]: https://gitee.com "Gitee - 码云"

效果
我常用的代码托管平台是 GitHubGitee

六、图片(Image)

语法与链接类似,仅在开头多一个 ! 符号,支持本地图片和网络图片。

语法

![图片alt文本](图片链接 "可选标题,hover 时显示")

示例

<!-- 网络图片 -->
![Markdown Logo](https://markdown-here.com/img/icon256.png "Markdown 图标")

<!-- 本地图片(路径相对当前文件) -->
![本地图片](./images/photo.jpg)

效果
Markdown Logo

七、引用块(Blockquote)

用于引用他人的话、文献内容等,用 > 作为前缀,可嵌套多层。

语法

> 这是一级引用块。
> 引用内容可以换行,只需在每一行开头加 >。
> 
> > 这是嵌套的二级引用块(前加两个 >)。

效果

这是一级引用块。 引用内容可以换行,只需在每一行开头加 >。

这是嵌套的二级引用块(前加两个 >)。

八、代码块(Code Block)

用于展示代码片段,支持单行代码和多行代码块,可指定编程语言实现语法高亮。

1. 单行代码

用 ` `(反引号)包裹代码片段。
语法

`print("Hello, Markdown!")`

效果
print("Hello, Markdown!")

2. 多行代码块

三个反引号 包裹代码,开头的反引号后可指定编程语言(如 pythonjavascript)实现语法高亮。
语法

```python
# Python 示例代码
def add(a, b):
    return a + b

result = add(10, 20)
print(f"结果:{result}")

**效果**:  
```python
# Python 示例代码
def add(a, b):
    return a + b

result = add(10, 20)
print(f"结果:{result}")

九、分割线(Horizontal Rule)

用于分隔不同内容区块,用 三个及以上*-_ 表示,单独占一行。

语法

---(三个减号)
***(三个星号)
___(三个下划线)

效果

十、表格(Table)

用于展示结构化数据,支持对齐方式设置(左对齐、居中、右对齐)。

语法

| 表头 1 | 表头 2 | 表头 3 |
|--------|--------|--------|
| 内容 1 | 内容 2 | 内容 3 |
| 内容 4 | 内容 5 | 内容 6 |

<!-- 带对齐方式的表格 -->
| 左对齐 | 居中对齐 | 右对齐 |
| :----- | :------: | ----: |
| 内容 1 | 内容 2   | 内容 3 |
| 内容 4 | 内容 5   | 内容 6 |

说明

  • 第二行的 : 用于指定对齐方式:: 在左边表示左对齐,两边都有 : 表示居中,: 在右边表示右对齐。
  • 表头与内容之间的分隔线(第二行)不能省略。

效果
| 表头 1 | 表头 2 | 表头 3 | |--------|--------|--------| | 内容 1 | 内容 2 | 内容 3 | | 内容 4 | 内容 5 | 内容 6 |

左对齐 居中对齐 右对齐
内容 1 内容 2 内容 3
内容 4 内容 5 内容 6

十一、任务列表(Task List)

用于创建待办事项清单,用 - [ ] 表示未完成,- [x] 表示已完成(部分编辑器支持)。

语法

- [x] 完成 Markdown 语法学习
- [ ] 编写示例文档
- [ ] 提交作业

效果

  • [x] 完成 Markdown 语法学习
  • [ ] 编写示例文档
  • [ ] 提交作业

十二、脚注(Footnote)

用于添加文档注释或引用说明,在正文中标注脚注标识,文末显示脚注内容(部分编辑器支持)。

语法

这是需要注释的文本[^1]。
这是另一个需要注释的文本[^2]。

<!-- 文末定义脚注内容 -->
[^1]: 脚注 1 的详细说明。
[^2]: 脚注 2 的详细说明,可包含链接 [GitHub](https://github.com)。

效果
这是需要注释的文本[^1]。 这是另一个需要注释的文本[^2]。

[^1]: 脚注 1 的详细说明。 [^2]: 脚注 2 的详细说明,可包含链接 GitHub

十三、目录(Table of Contents)

自动生成文档目录,基于标题层级(部分编辑器支持,语法可能略有差异)。

语法

[TOC]

效果
自动列出所有标题,点击可跳转至对应章节(示例中因无实际标题层级,暂不展示)。

常用编辑器推荐

  • 在线编辑器:Typora、Markdown Here、StackEdit
  • 本地编辑器:VS Code(安装 Markdown 插件)、Typora、Obsidian
  • 平台支持:GitHub、GitLab、知乎、掘金、语雀等均原生支持 Markdown。

以上是最常用的 Markdown 语法,覆盖了日常文档编写的 90% 以上场景。不同编辑器对语法的支持可能略有差异,可根据实际使用场景灵活调整。

2025-11-21 10:19

LINUX管理员需要掌握的命令

作为一名 Linux 服务器维护管理人员,掌握一些核心命令是日常工作的基础。以下是一份常用命令的整理,包含用法说明和注意事项,希望能帮助你更高效地工作。

一、系统信息查看

这类命令用于快速了解服务器的硬件、系统和运行状态。

  1. uname

    • 用法uname [选项]
    • 常用选项
      • -a:显示所有系统信息(内核版本、主机名、硬件架构等)。
      • -r:仅显示内核版本。
    • 示例uname -a
    • 注意:这是查看服务器基本信息的首要命令,对于排查兼容性问题至关重要。
  2. hostname

    • 用法hostname [选项]
    • 常用选项
      • 无选项:显示当前主机名。
      • -I:显示所有网络接口的 IP 地址。
    • 示例hostname -I
    • 注意:在配置集群或网络服务时,确保主机名解析正确。
  3. uptime

    • 用法uptime
    • 说明:显示系统运行时间、当前登录用户数以及系统平均负载(1分钟、5分钟、15分钟)。
    • 示例uptime
    • 注意load average 值若长期高于服务器 CPU 核心数,可能表示系统负载过高。
  4. free

    • 用法free [选项]
    • 常用选项
      • -h:以人类可读的格式显示内存大小(如 GB, MB)。
      • -m:以 MB 为单位显示。
    • 示例free -h
    • 注意:重点关注 available 内存,它代表真正可用的内存大小。buff/cache 占用过高通常是正常的,系统会在需要时释放。
  5. df

    • 用法df [选项] [目录或文件]
    • 常用选项
      • -h:以人类可读的格式显示磁盘空间。
      • -T:显示文件系统类型。
    • 示例df -h / (查看根目录的磁盘空间)
    • 注意:定期检查磁盘空间,避免因磁盘满导致服务异常。
  6. top / htop

    • 用法:直接输入 tophtop
    • 说明:实时监控系统进程的资源占用情况(CPU、内存、运行时间等)。htoptop 的增强版,界面更友好。
    • 交互快捷键
      • P:按 CPU 使用率排序。
      • M:按内存使用率排序。
      • k:终止指定进程(需输入 PID)。
      • q:退出。
    • 注意top 是排查系统性能瓶颈和定位耗资源进程的利器。

二、用户与权限管理

  1. useradd / usermod / userdel

    • 用法
      • 创建用户:useradd [选项] 用户名
      • 修改用户:usermod [选项] 用户名
      • 删除用户:userdel [选项] 用户名
    • 常用选项
      • -m:创建用户时同时创建家目录。
      • -s:指定用户的登录 shell。
      • -G:将用户添加到附加组。
      • -r:创建系统用户。
    • 示例useradd -m -s /bin/bash newuser
    • 注意
      • 删除用户时,userdel -r 用户名 会同时删除用户的家目录,务必谨慎。
      • 生产环境中,应避免使用 root 用户进行日常操作。
  2. passwd

    • 用法passwd [用户名]
    • 说明:修改用户密码。不指定用户名则修改当前用户密码。
    • 注意
      • 为用户设置强密码(长度不少于8位,包含大小写字母、数字和特殊字符)。
      • 避免在命令行中直接输入密码(如 passwd username &lt;&lt;&lt; "newpassword"),这会在历史记录中留下明文密码。
  3. chmod

    • 用法chmod [选项] 模式 文件或目录
    • 模式:可以使用数字(如 755)或符号(如 u+x)表示。
      • u:所有者,g:所属组,o:其他人,a:所有人。
      • +:添加权限,-:移除权限,=:设置权限。
      • r:读(4),w:写(2),x:执行(1)。
    • 示例chmod 755 script.shchmod u+x script.sh
    • 注意
      • 对目录设置执行权限 (x) 是进入该目录的必要条件。
      • 谨慎使用 chmod 777,它会给所有用户完全权限,存在严重安全风险。
  4. chown

    • 用法chown [选项] 所有者:所属组 文件或目录
    • 示例chown www-data:www-data /var/www/html
    • 注意:该命令通常需要 root 权限执行。

三、文件与目录操作

  1. ls

    • 用法ls [选项] [目录]
    • 常用选项
      • -l:长格式显示(包含权限、大小、修改时间等)。
      • -a:显示所有文件,包括隐藏文件(以 . 开头)。
      • -h:与 -l 配合,以人类可读格式显示大小。
    • 示例ls -lha
    • 注意ls -l 的输出中,第一个字符为 d 表示目录,- 表示文件,l 表示链接。
  2. cd

    • 用法cd [目录路径]
    • 特殊用法
      • cd ..:返回上一级目录。
      • cd ~cd:回到当前用户的家目录。
      • cd -:回到上一次所在的目录。
  3. pwd

    • 用法pwd
    • 说明:显示当前所在的工作目录的绝对路径。
  4. mkdir

    • 用法mkdir [选项] 目录名
    • 常用选项
      • -p:递归创建目录,即使父目录不存在也不会报错。
    • 示例mkdir -p /data/logs/app
  5. rm

    • 用法rm [选项] 文件或目录
    • 常用选项
      • -r:递归删除目录及其内容。
      • -f:强制删除,不提示确认。
    • 示例rm -rf old_directory
    • 注意rm -rf 是极其危险的命令! 一旦执行,数据很难恢复。操作前务必确认路径和文件无误,尤其是在使用 root 权限时。
  6. cp

    • 用法cp [选项] 源文件 目标文件cp [选项] 源文件... 目标目录
    • 常用选项
      • -r:递归复制目录。
      • -a:归档复制,保留文件的权限、所有者、时间戳等所有属性,常用于备份。
      • -v:显示复制过程。
    • 示例cp -av /etc /backup/etc.bak
  7. mv

    • 用法mv [选项] 源文件 目标文件mv [选项] 源文件... 目标目录
    • 说明:移动或重命名文件/目录。
    • 注意:在同一文件系统内移动文件时,速度很快,因为它只修改文件名和目录条目,不移动实际数据。

四、网络操作

  1. ip

    • 用法ip [选项] 操作对象
    • 常用对象和操作
      • ip addr:查看所有网络接口的 IP 地址配置。
      • ip route:查看路由表。
      • ip link set dev &lt;接口名&gt; up/down:启用或禁用网络接口。
    • 示例ip addr show eth0
    • 注意ip 命令是现代 Linux 系统中推荐的网络配置工具,正在逐步替代传统的 ifconfig, route 等命令。
  2. ping

    • 用法ping [选项] 主机名或IP地址
    • 常用选项
      • -c &lt;次数&gt;:指定发送 ICMP Echo 请求的次数。
      • -i &lt;间隔&gt;:指定发送请求的时间间隔(秒)。
    • 示例ping -c 4 8.8.8.8
    • 注意ping 使用 ICMP 协议,某些防火墙可能会禁止 ICMP,导致 ping 不通但服务可能正常。
  3. netstat / ss

    • 用法netstat [选项]ss [选项]
    • 说明:查看网络连接状态、监听端口等。ssnetstat 的替代工具,速度更快,功能更强大。
    • 常用选项
      • netstat -tulpn:显示所有正在监听的 TCP 和 UDP 端口,并显示对应的进程。
      • ss -tulpnss 的 equivalent 命令。
    • 示例ss -tulpn | grep nginx
    • 注意:这是检查服务是否正确监听端口的关键命令。

五、日志查看

  1. tail

    • 用法tail [选项] 文件
    • 常用选项
      • -f:实时跟踪文件内容的变化(最常用)。
      • -n &lt;行数&gt;:显示文件的最后 N 行。
    • 示例tail -f /var/log/nginx/access.log
    • 注意Ctrl + C 可以退出实时跟踪模式。
  2. less / more

    • 用法less 文件more 文件
    • 说明:分页查看文件内容。less 功能更强大,可以向前/向后翻页、搜索等。
    • 交互快捷键(在 less 中):
      • 空格键:向下翻一页。
      • b:向上翻一页。
      • /关键词:向下搜索关键词。
      • n:跳转到下一个匹配项。
      • q:退出。
    • 示例less /var/log/messages
  3. grep

    • 用法grep [选项] "搜索模式" 文件
    • 常用选项
      • -i:忽略大小写。
      • -n:显示匹配行的行号。
      • -r:递归搜索目录下的所有文件。
      • -E:使用扩展正则表达式。
    • 示例grep -rn "error" /var/log/
    • 注意grep 是日志分析中不可或缺的工具,用于快速定位关键信息。

六、系统管理与维护

  1. systemctl

    • 用法systemctl [选项] 服务名
    • 常用操作
      • systemctl start 服务名:启动服务。
      • systemctl stop 服务名:停止服务。
      • systemctl restart 服务名:重启服务。
      • systemctl status 服务名:查看服务状态。
      • systemctl enable 服务名:设置服务开机自启。
      • systemctl disable 服务名:禁止服务开机自启。
    • 示例systemctl status nginx
    • 注意systemctl 是 Systemd 系统(CentOS 7+, Ubuntu 16.04+ 等)的服务管理命令。在较旧的系统(如 CentOS 6)中,使用 servicechkconfig 命令。
  2. tar

    • 用法tar [选项] 归档文件名 源文件或目录
    • 常用选项
      • -c:创建新的归档文件。
      • -x:从归档文件中提取文件。
      • -v:显示操作过程。
      • -f:指定归档文件名(这个选项必须放在最后)。
      • -z:通过 gzip 压缩/解压。
      • -j:通过 bzip2 压缩/解压。
    • 示例
      • 压缩:tar -czvf backup.tar.gz /home/user/data
      • 解压:tar -xzvf backup.tar.gz -C /path/to/extract
    • 注意tar 是 Linux 中最常用的归档工具,常与压缩算法结合使用。
  3. find

    • 用法find [搜索路径] [选项] [表达式]
    • 常用选项
      • -name "文件名":按文件名查找(支持通配符 *?)。
      • -type f/d:查找文件(f)或目录(d)。
      • -size +100M:查找大于 100MB 的文件。
      • -mtime -7:查找最近 7 天内修改过的文件。
      • -exec 命令 {} \;:对找到的每个文件执行指定命令。
    • 示例find /var/log -name "*.log" -mtime +30 -exec rm {} \; (删除 /var/log 目录下 30 天前的 .log 文件)
    • 注意find 命令功能强大,但在大型文件系统上递归搜索可能会比较耗时。

通用注意事项

  1. 备份为王:在执行任何可能修改系统或删除数据的操作(如 rm, mv, chmod, chown)之前,尤其是在生产环境中,务必先备份相关文件或目录。
  2. 最小权限原则:尽量使用普通用户执行日常任务。只有在必要时才使用 sudo 或切换到 root 用户。这可以有效防止误操作带来的灾难性后果。
  3. 谨慎使用通配符:在 rm, cp 等命令中使用 * 等通配符时,一定要仔细检查,避免匹配到不该操作的文件。
  4. 命令历史:善用 history 命令查看之前执行过的命令。可以通过 !编号 快速重复执行,或使用 Ctrl + R 进行反向搜索。
  5. 文档和注释:对于复杂的配置或脚本,养成良好的文档记录习惯。这不仅方便自己日后查阅,也能帮助团队其他成员理解。
  6. 保持学习:Linux 系统博大精深,新的工具和技术层出不穷。持续学习是成为一名优秀管理员的必经之路。

这份清单涵盖了最基础和常用的命令,但远非全部。根据你管理的服务器类型(Web 服务器、数据库服务器等)和具体业务场景,还需要深入学习相关的专业知识和命令。

2025-11-21 09:56

DOS命令

 netstat -ano|findstr "80"

查看应用占用的端口,并且显示pid号,可以直接任务管理器kill掉。

arp命令:

①   arp –a:用于查看高速缓存中的所有项目。

② arp -a IP:如果有多个网卡,那么使用arp -a加上接口的IP地址,就可以只显示与该接口相关的ARP缓存项目。

③ arp -s IP 物理地址:向ARP高速缓存中人工输入一个静态项目。该项目在计算机引导过程中将保持有效状态,或者在出现错误时,人工配置的物理地址将自动更新该项目。

④ arp -d IP:使用本命令能够人工删除一个静态项目。

tracert命令 就是trace route命令,用来跟踪路由的。格式为:tracert ip_address

route命令

 route print:用于显示路由表中的当前项目,在单个路由器网段上的输出结果

routeadd:使用本命令,可以将路由项目添加给路由表。

例如,如果要设定一个到目的网络209.99.32.33的路由,其间要经过5个路由器网段,首先要经过本地网络上的一个路由器IP为202.96.123.5,子网掩码为255.255.255.224,那么用户应该输入以下命令:

route add 209.99.32.33 mask 255.255.255.224 202.96.123.5 metric 5

routechange:可以使用本命令来修改数据的传输路由,不过,用户不能使用本命令来改变数据的目的地。下面这个例子将上例路由改变采用一条包含3个网段的路径:

route add 209.99.32.33 mask 255.255.255.224 202.96.123.250  metric 3

route delete  使用本命令可以从路由表中删除路由。例如:route delete 209.99.32.33

nslookup的功能是查询任何一台机器的IP地址和其对应的域名。它通常需要一台域名服务器来提供域名。如果用户已经设置好域名服务器,就可以用这个命令查看不同主机的IP地址对应的域名。

nbtstat命令可以查看计算机上网络配置的一些信息。使用这条命令还可以查找出别人计算机上一些私人信息。如果想查看自己计算机上的网络信息,可以运行nbtstat -n,可以得到你所在的工作组,计算机名以及网卡地址等等;想查看网络上其他的电脑情况,就,运行nbtstat -a *.*.*.*,此处的*.*.*.*用IP地址代替就会返回得到那台主机上的一些信息。

netstat命令能够显示活动的TCP连接、计算机侦听的端口、以太网统计信息、IP路由表、IPv4统计信息(对于IP、ICMP、TCP和UDP协议)以及IPv6统计信息(对于IPv6、ICMPv6、通过IPv6的TCP以及UDP协议)。使用时如果不带参数,netstat显示活动的TCP连接。①     netstat –a:-a选项显示所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请求(LISTENING)的那些连接。②      netstat –n:以点分十进制的形式列出IP地址,而不是象征性的主机名和网络名。③     netstat -e:-e选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据包的总字节数、错误数、删除数、数据包的数量和广播的数量。这些统计数据既有发送的数据包数量,也有接收的数据包数量。使用这个选项可以统计一些基本的网络流量。④     netstat -r:-r选项可以显示关于路由表的信息,类似于route print命令时看到的信息。除了显示有效路由外,还显示当前有效的连接。

net命令很强大 所有的net命令都可以加入/y 和/n参数,使用net  /?来寻找对应的对象,例如:net account 就是对账户的操作, 


2025-11-21 09:51

LINUX命令

alias:给命令起别名

awk = "Aho Weiberger and Kernighan" ,三个作者的姓的第一个字母

bash:GNU Bourne-Again Shell,大多Linux的默认shell

bc = Basic Calculator,基础计算器,scale设定小数位,quit退出

bg = BackGround,后台运行任务

bye = bye,用于在FTP时退出FTP执行

cal = calendar,日历,后跟月份数、年份数可显示指定月日历

cat = catenate,连续,输出文件内容,-n显示行号,-b不显示空行,有意思的是tac则从后向前输出

cd = Change Directory,切换目录

chgrp = Change group,改变文件归属用户组

clear = clear,清屏

chmod = Change mode,改变读写权限,-R递归更改,a默认所有用户u本用户g本群组o其他用户,+-rwx增减读写执行权限,rwx421

chown = Change owner,改变所有者

cp = copy,复制

crontab = Chronos,希腊文时间,定时执行工具,* * * * *分别为分时日月星期,*代表所有,"-"为范围","为多值"/"为频率,-u指定用户,-l查看任务,-r删除任务,-e编辑任务。

cut = cut,从文件中的每行文本中剪出指定字符,功能类似grep,-b以字节为单位,-c以字符为单位,-d自定义分隔符默认制表符

date = date,日期时间,date "+option",-d显示指定时间,-r显示文件最后修改时间,-s修改时间,%x日期,%X时间,%F日期,%D月日年,%Y4位年份,%y2位年份,%m月份,%d日,%H24制时,%I12制时,%M分,%S秒

declare = declare,用于声明shell变量,-a数组,-i指定整数型

df = Disk Free,剩余磁盘空间,-h以适阅读单位显示,后跟文件则显示其所在挂载点磁盘剩余空间

dirs = directories,从目录栈中读取,功能类似于一个数组,先显示本目录再显示目录栈,-c删除目录栈中所有记录,-p每行显示一个(默认连续显示),-v每行显示一个并加编号,+N显示第N个目录(数字从0开始),-N显示倒数第N个目录

du = Disk Usage,磁盘使用情况,统计文件大小,-h以适阅读单位显示,-s不迭代仅合计统计,--max-depth n指定统计深度

egrep = Extended GREP,可使用扩展正则的grep

exec =execute,执行 ,内部命令

find = find,查找,find PATH -OPTION [-print] [-exec cmd] {} \;,PATH为查找数据若为当前目录下则为“.”,-name文件名,-mtime +/- N N天前或内更改的文件,-ctime +/-N N天前或内创建的文件,-type文件类型d为目录f为文件,-size 大于指定字节的文件,

fg = ForeGround,前台运行任务

fmt = format,简单的文本格式化

ftp = File Transfer Protocol,文件传输,后跟IP地址,get从远程FTP机下载到本机,mget批量下载,put将本机文件上传到远程FTP机,mput批量上传

free = free,内存使用情况,-s间隔N秒查询一次,-m -k -b以M、KB、Byte为单位显示

gawk = GNU AWK

grep = global regular expression print,全局正则表达式打印,强大的文本搜索工具,-c只输出计数,-i忽略大小写,-n输出行号,-v取反,-h多文件时不显文件名,-r递归搜索

head = head,查看前n行

iostat = in out status,IO及CPU状态

iostat = in out status,IO及CPU状态

less = less,分页展示文件内容

logname = loginname,显示当前登录用户名

ln = link,建立链接,-s建立软链接(默认硬链接)

locate = locate,查找文件地址,并不查硬盘,而是在/var/lib/slocate/slocate.db中查看,速度快省资源

ls = list,列出文件,-l详细信息,-h合适单位显示,-S大小排序,-t时间排序

lsof = List Open Files,列出当前系统打开的文件,ROOT权限,-c某进程打开的文件,-p某进程打开的文件,-u某用户打开的文件,跟目录为目录下打开的文件,跟文件为文件相关打开信息,-i某端口或IP打开的文件

man = Manual意思是手册,可以用这个命令查询其他命令的用法。

mkdir = Makedirectory,创建目录,-p指定路径,-m指定权限

mv = Move,移动文件,同目录下则为重命名,-i询问试覆盖,-f同名强制覆盖,-b备份旧文件(文件名后加~),-u若本文件较新则覆盖旧文件

more = more,分页显示

nl = Number of Lines,计算文件行号,类似cat,-b a 计算空行(默认不计算),-n rz以6位数字显示行号前补0,-w指定占位数(默认6)

passwd = PassWord

pg = pager,分页显示文件内容

ping = Packet InterNet Grouper,测试网络,-c指定次数,-i指定间隔秒数

printf = Print Format

ps = Processes Status,进程状态 ,命令执行时刻进程信息,-a同终端进程,-A所有进程,-u指定用户,-e同-A,-f展示所有信息,aux查看进程详细信息类似-ef,-C可跟搜索词,--sort=-pcpu,+pmem按cpu降序按mem内存升序排序

pushd = push Directory,当目录放入目录栈,+/-N将正数/倒数第N个目录移到栈顶并切换到该目录,-n在切目录栈时不切目录

popd = pop Directory,从目录栈弹出目录,+/-N将正数/倒数第N个目录从目录栈中移除

pwd = print working Directory,打印工作目录

rcp = remote copy,远程拷贝,-r递归,-p保留修改时间和权限,将远程文件拷贝到本机,限制条件较多

rm = ReMove,删除文件,-r递归,-f不询问强制删除

rmdir = Remove directory,删除目录

rlogin = remote login,-l指定登录用户名,rlogin IP/主机名

rsh = remote shell,远程执行shell,-l指定用户

rmp = RedHat Package Manager,RedHat软件包管理工具,类似Windows里面的“添加/删除程序”,-a查询所有,-e卸载,-h显示进度,-i显示相关信息,-l列出软件所有文件名,-q查询,-p软件包内文件,-v显示执行过程;常用参数:-ivh安装并显示进度,-qpl查看软件包内文件,-qa查询一个软件是否安装过,--relocate指定安装目录,--rebuild编译+打包,--recompile编译+打包+安装

reboot=Restart your computer,重启

scp = secure copy,用于Linux间复制,基于ssh远程复制,-p保留修改时间权限,-r递归,-P指定端口,-v显示进度,

sed = Stream Editor,流编辑器,本身即先查,在CMD中匹配字符两侧要有//,sed -OPTION 'CMD' file,选项:-n安静模式,-i直接修改不屏幕输出,-r支持扩展正则,-e多命令,-f文件指定动作;命令:a增,d删除,i插,c改,s正则查,p屏幕输出,g获取内存缓冲区内容并替代当前模板块中文字,G获取内容追加,h内容拷贝到内存,H内容追加到内存

set = set,主要作用是显示系统中已经存在的shell变量,以及设置shell变量的新变量值,不能够定义新的shell变量,定义新的变量使用declare命令。

shutdown,关机,-t设定延迟时间,-k通知所有用户,-r重启,-h关机后停机,-c取消关机,-f强制关机,time设定关机时间

sleep = sleep,动作延迟

sort = sort,排序,-b忽略行首空格,-r反向,-n以数值,-o排序结果输出文件,-t指定列分隔符,-k指定排序列,-f忽略大小

split = split,将大文件分割成小文件,-N每N行分割成一个文件,-bN每N字节分割成一个文件,-C按字节分割保证完整性

ssh = Secure Shell,远程登录Linux,-l指定用户,-p指定端口

sshpass,一款ssh免密码输入软件

su = switch user,切换用户,root切任何用户不需要密码,但其他用户之间切换需要密码,- user表示切换到用户user并将用户环境一并切换,-c执行命令再退回原用户

sudo = super user do,受限制的su

svn = SubVersioN

sync = 强制将内存写入硬盘

tar = tape archive,打包归档文件,-c创建create,-x提取extract,-t查看list,-f指定归档文件,-m解压时不变更文件更改时间,-p解压时原权限不变,-v显示执行详情,-r向归档文件中追加,-u更新归档文件中文件

tail = tail,查看尾部n行

touch = touch,创建,修改文件或者目录的时间属性,若文件不存在,系统会建立一个新的文件,更改文件权限再结合chmod

top = top,实时显示系统中各个进程的资源占用状况,该命令可以按CPU使用、内存使用和执行时间对任务进行排序

umount = Unmount 卸载,可以通过设备名卸载或挂载点卸载

unset = unset,用于删除变量或函数

useradd、userdel、usermod,新增用户、删除用户、修改用户

w = who,显示目前登入系统的用户信息

xargs = eXtended ARGuments,给命令传递参数的一个过滤器,也是组合多个命令的一个工具,它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理

wc = Word Count,计算文件的Byte数、字数、或是列数,-c只显示字节数,-l只显示行数,-w只统计单词数

who = who,显示当前系统所有使用者等信息

whoami = whoami,命令用于显示自身用户名称。

which = which,命令用于查找文件

whereis = where is,查看文件

命令:rm -rf test  (注意,这样做是非常危险的!)

rm是删除命令。rm -r 并不是一个完整的命令后面还需要加上需要删除的路径

例如:rm -r test 就是删除test 不管他是文件还是目录,rm的使用详情如下:

语法 rm (选项)(参数)

选项

-d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;

-f:强制删除文件或目录;

-i:删除已有文件或目录之前先询问用户;

-r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;

--preserve-root:不对根目录进行递归操作;

-v:显示指令的详细执行过程。

参数 文件:指定被删除的文件列表,如果参数中含有目录,则必须加上-r或者-R选项。 实例 交互式删除当前目录下的文件test和example rm -i test example Remove test ?n(不删除文件test) Remove example ?y(删除文件example)

删除当前目录下除隐含文件外的所有文件和子目录

# rm -r *

su:Swith user 切换用户,切换到root用户

cat: Concatenate 串联

uname: Unix name 系统名称

df: Disk free 空余硬盘

du: Disk usage 硬盘使用率

chown: Change owner 改变所有者

chgrp: Change group 改变用户组

ps:Process Status 进程状态

tar:Tape archive 解压文件

chmod: Change mode 改变模式

umount: Unmount 卸载

ldd:List dynamic dependencies 列出动态相依

insmod:Install module 安装模块

rmmod:Remove module 删除模块

lsmod:List module 列表模块

alias :Create your own name for a command

bash :GNU Bourne-Again Shell linux内核

grep:global regular expression print

httpd :Start Apache

ipcalc :Calculate IP information for a host

ping :Send ICMP ECHO_Request to network hosts

reboot: Restart your computer

sudo:Superuser do

/bin = BINaries

/dev = DEVices

/etc = ETCetera

/lib = LIBrary

/proc = PROCesses

/sbin = Superuser BINaries

/tmp = TeMPorary

/usr = Unix Shared Resources

/var = VARiable ?

FIFO = First In, First Out

GRUB = GRand Unified Bootloader

IFS = Internal Field Seperators

LILO = LInux LOader

MySQL = My最初作者的名字SQL = Structured Query Language

PHP = Personal Home Page Tools = PHP Hypertext Preprocessor

PS = Prompt String

Perl = “Pratical Extraction and Report Language” = “Pathologically Eclectic Rubbish Lister”

Python Monty Python’s Flying Circus

Tcl = Tool Command Language

Tk = ToolKit

VT = Video Terminal

YaST = Yet Another Setup Tool

apache = “a patchy” server

apt = Advanced Packaging Tool

ar = archiver

as = assembler

bash = Bourne Again SHell

bc = Basic (Better) Calculator

bg = BackGround

cal = CALendar

cat = CATenate

cd = Change Directory

chgrp = CHange GRouP

chmod = CHange MODe

chown = CHange OWNer

chsh = CHange SHell

cmp = compare

cobra = Common Object Request Broker Architecture

comm = common

cp = CoPy

cpio = CoPy In and Out

cpp = C Pre Processor

cups = Common Unix Printing System

cvs = Current Version System

daemon = Disk And Execution MONitor

dc = Desk Calculator

dd = Disk Dump

df = Disk Free

diff = DIFFerence

dmesg = diagnostic message

du = Disk Usage

ed = editor

egrep = Extended GREP

elf = Extensible Linking Format

elm = ELectronic Mail

emacs = Editor MACroS

eval = EVALuate

ex = EXtended

exec = EXECute

fd = file descriptors

fg = ForeGround

fgrep = Fixed GREP

fmt = format

fsck = File System ChecK

fstab = FileSystem TABle

fvwm = F*** Virtual Window Manager

gawk = GNU AWK

gpg = GNU Privacy Guard

groff = GNU troff

hal = Hardware Abstraction Layer

joe = Joe’s Own Editor

ksh = Korn SHell

lame = Lame Ain’t an MP3 Encoder

lex = LEXical analyser

lisp = LISt Processing = Lots of Irritating Superfluous Parentheses

ln = LiNk

lpr = Line PRint

ls = list

lsof = LiSt Open Files

m4 = Macro processor Version 4

man = MANual pages

mawk = Mike Brennan’s AWK

mc = Midnight Commander

mkfs = MaKe FileSystem

mknod = MaKe NODe

motd = Message of The Day

mozilla = MOsaic GodZILLa

mtab = Mount TABle

mv = MoVe

nano = Nano’s ANOther editor

nawk = New AWK

nl = Number of Lines

nm = names

nohup = No HangUP

nroff = New ROFF

od = Octal Dump

passwd = PASSWorD

pg = pager

pico = PIne’s message COmposition editor

pine = “Program for Internet News & Email” = “Pine is not Elm”

ping = Packet InterNet Grouper

pirntcap = PRINTer CAPability

popd = POP Directory

pr = pre

printf = PRINT Formatted

ps = Processes Status

pty = pseudo tty

pushd = PUSH Directory

pwd = Print Working Directory

rc = runcom = run command, shell

rev = REVerse

rm = ReMove

rn = Read News

roff = RunOFF

rpm = RPM Package Manager = RedHat Package Manager

rsh, rlogin, = Remote

rxvt = ouR XVT

sed = Stream EDitor

seq = SEQuence

shar = SHell ARchive

slrn = S-Lang rn

ssh = Secure SHell

ssl = Secure Sockets Layer

stty = Set TTY

su = Substitute User

svn = SubVersioN

tar = Tape ARchive

tcsh = TENEX C shell

telnet = TEminaL over Network

termcap = terminal capability

terminfo = terminal information

tr = traslate

troff = Typesetter new ROFF

tsort = Topological SORT

tty = TeleTypewriter

twm = Tom’s Window Manager

tz = TimeZone

udev = Userspace DEV

ulimit = User’s LIMIT

umask = User’s MASK

uniq = UNIQue

vi = VIsual = Very Inconvenient

vim = Vi IMproved

wall = write all

wc = Word Count

wine = WINE Is Not an Emulator

xargs = eXtended ARGuments

xdm = X Display Manager

xlfd = X Logical Font Description

xmms = X Multimedia System

xrdb = X Resources DataBase

xwd = X Window Dump

yacc = yet another compiler compiler

Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短小但却功能强大。我将我了解到的命令列举一下,仅供大家参考:后面还要发布关于对应英文的,以便记忆。

系统信息 

arch 显示机器的处理器架构

uname -m 显示机器的处理器架构

uname -r 显示正在使用的内核版本 

dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) 

hdparm -i /dev/hda 罗列一个磁盘的架构特性 

hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 

cat /proc/cpuinfo 显示CPU info的信息 

cat /proc/interrupts 显示中断 

cat /proc/meminfo 校验内存使用 

cat /proc/swaps 显示哪些swap被使用 

cat /proc/version 显示内核的版本 

cat /proc/net/dev 显示网络适配器及统计 

cat /proc/mounts 显示已加载的文件系统 

lspci -tv 罗列 PCI 设备 

lsusb -tv 显示 USB 设备 

date 显示系统日期 

cal 2007 显示2007年的日历表 

date 041217002007.00 设置日期和时间 - 月日时分年.秒 

clock -w 将时间修改保存到 BIOS 

关机 (系统的关机、重启以及登出 ) 

shutdown -h now 关闭系统

init 0 关闭系统

telinit 0 关闭系统

shutdown -h hours:minutes & 按预定时间关闭系统 

shutdown -c 取消按预定时间关闭系统 

shutdown -r now 重启

reboot 重启

logout 注销 

文件和目录 

cd /home 进入 '/ home' 目录' 

cd .. 返回上一级目录 

cd ../.. 返回上两级目录 

cd 进入个人的主目录 

cd ~user1 进入个人的主目录 

cd - 返回上次所在的目录 

pwd 显示工作路径 

ls 查看目录中的文件 

ls -F 查看目录中的文件 

ls -l 显示文件和目录的详细资料 

ls -a 显示隐藏文件 

ls *[0-9]* 显示包含数字的文件名和目录名 

tree 显示文件和目录由根目录开始的树形结构

lstree 显示文件和目录由根目录开始的树形结构

mkdir dir1 创建一个叫做 'dir1' 的目录' 

mkdir dir1 dir2 同时创建两个目录 

mkdir -p /tmp/dir1/dir2 创建一个目录树 

rm -f file1 删除一个叫做 'file1' 的文件' 

rmdir dir1 删除一个叫做 'dir1' 的目录' 

rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容 

rm -rf dir1 dir2 同时删除两个目录及它们的内容 

mv dir1 new_dir 重命名/移动 一个目录 

cp file1 file2 复制一个文件 

cp dir/* . 复制一个目录下的所有文件到当前工作目录 

cp -a /tmp/dir1 . 复制一个目录到当前工作目录 

cp -a dir1 dir2 复制一个目录 

cp -r dir1 dir2 复制一个目录及子目录

ln -s file1 lnk1 创建一个指向文件或目录的软链接 

ln file1 lnk1 创建一个指向文件或目录的物理链接 

touch -t 0712250000 file1 修改一个文件或目录的时间戳 - (YYMMDDhhmm) 

file file1 outputs the mime type of the file as text 

iconv -l 列出已知的编码 

iconv -f fromEncoding -t toEncoding inputFile > outputFile creates a new from the given input file by assuming it is encoded in fromEncoding and converting it to toEncoding. 

find . -maxdepth 1 -name *.jpg -print -exec convert "{}" -resize 80x60 "thumbs/{}" \; batch resize files in the current directory and send them to a thumbnails directory (requires convert from Imagemagick) 

文件搜索 

find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录 

find / -user user1 搜索属于用户 'user1' 的文件和目录 

find /home/user1 -name \*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件 

find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件 

find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件 

find / -name \*.rpm -exec chmod 755 '{}' \; 搜索以 '.rpm' 结尾的文件并定义其权限 

find / -xdev -name \*.rpm 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备 

locate \*.ps 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令 

whereis halt 显示一个二进制文件、源码或man的位置 

which halt 显示一个二进制文件或可执行文件的完整路径 

挂载一个文件系统 

mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘 - 确定目录 '/ mnt/hda2' 已经存在 

umount /dev/hda2 卸载一个叫做hda2的盘 - 先从挂载点 '/ mnt/hda2' 退出 

fuser -km /mnt/hda2 当设备繁忙时强制卸载 

umount -n /mnt/hda2 运行卸载操作而不写入 /etc/mtab 文件- 当文件为只读或当磁盘写满时非常有用 

mount /dev/fd0 /mnt/floppy 挂载一个软盘 

mount /dev/cdrom /mnt/cdrom 挂载一个cdrom或dvdrom 

mount /dev/hdc /mnt/cdrecorder 挂载一个cdrw或dvdrom 

mount /dev/hdb /mnt/cdrecorder 挂载一个cdrw或dvdrom 

mount -o loop file.iso /mnt/cdrom 挂载一个文件或ISO镜像文件 

mount -t vfat /dev/hda5 /mnt/hda5 挂载一个Windows FAT32文件系统 

mount /dev/sda1 /mnt/usbdisk 挂载一个usb 捷盘或闪存设备 

mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share 挂载一个windows网络共享 

磁盘空间 

df -h 显示已经挂载的分区列表 

ls -lSr |more 以尺寸大小排列文件和目录 

du -sh dir1 估算目录 'dir1' 已经使用的磁盘空间' 

du -sk * | sort -rn 以容量大小为依据依次显示文件和目录的大小 

rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n 以大小为依据依次显示已安装的rpm包所使用的空间 (fedora, redhat类系统) 

dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n 以大小为依据显示已安装的deb包所使用的空间 (ubuntu, debian类系统) 

用户和群组 

groupadd group_name 创建一个新用户组 

groupdel group_name 删除一个用户组 

groupmod -n new_group_name old_group_name 重命名一个用户组 

useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1 创建一个属于 "admin" 用户组的用户 

useradd user1 创建一个新用户 

userdel -r user1 删除一个用户 ( '-r' 排除主目录) 

usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 修改用户属性 

passwd 修改口令 

passwd user1 修改一个用户的口令 (只允许root执行) 

chage -E 2005-12-31 user1 设置用户口令的失效期限 

pwck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的用户 

grpck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的群组 

newgrp group_name 登陆进一个新的群组以改变新创建文件的预设群组 

文件的权限 - 使用 "+" 设置权限,使用 "-" 用于取消 

ls -lh 显示权限 

ls /tmp | pr -T5 -W$COLUMNS 将终端划分成5栏显示 

chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r )、写(w)和执行(x)的权限 

chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限 

chown user1 file1 改变一个文件的所有人属性 

chown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性 

chgrp group1 file1 改变文件的群组 

chown user1:group1 file1 改变一个文件的所有人和群组属性 

find / -perm -u+s 罗列一个系统中所有使用了SUID控制的文件 

chmod u+s /bin/file1 设置一个二进制文件的 SUID 位 - 运行该文件的用户也被赋予和所有者同样的权限 

chmod u-s /bin/file1 禁用一个二进制文件的 SUID位 

chmod g+s /home/public 设置一个目录的SGID 位 - 类似SUID ,不过这是针对目录的 

chmod g-s /home/public 禁用一个目录的 SGID 位 

chmod o+t /home/public 设置一个文件的 STIKY 位 - 只允许合法所有人删除文件 

chmod o-t /home/public 禁用一个目录的 STIKY 位 

文件的特殊属性 - 使用 "+" 设置权限,使用 "-" 用于取消 

chattr +a file1 只允许以追加方式读写文件 

chattr +c file1 允许这个文件能被内核自动压缩/解压 

chattr +d file1 在进行文件系统备份时,dump程序将忽略这个文件 

chattr +i file1 设置成不可变的文件,不能被删除、修改、重命名或者链接 

chattr +s file1 允许一个文件被安全地删除 

chattr +S file1 一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘 

chattr +u file1 若文件被删除,系统会允许你在以后恢复这个被删除的文件 

lsattr 显示特殊的属性 

打包和压缩文件 

bunzip2 file1.bz2 解压一个叫做 'file1.bz2'的文件 

bzip2 file1 压缩一个叫做 'file1' 的文件 

gunzip file1.gz 解压一个叫做 'file1.gz'的文件 

gzip file1 压缩一个叫做 'file1'的文件 

gzip -9 file1 最大程度压缩 

rar a file1.rar test_file 创建一个叫做 'file1.rar' 的包 

rar a file1.rar file1 file2 dir1 同时压缩 'file1', 'file2' 以及目录 'dir1' 

rar x file1.rar 解压rar包 

unrar x file1.rar 解压rar包 

tar -cvf archive.tar file1 创建一个非压缩的 tarball 

tar -cvf archive.tar file1 file2 dir1 创建一个包含了 'file1', 'file2' 以及 'dir1'的档案文件 

tar -tf archive.tar 显示一个包中的内容 

tar -xvf archive.tar 释放一个包 

tar -xvf archive.tar -C /tmp 将压缩包释放到 /tmp目录下 

tar -cvfj archive.tar.bz2 dir1 创建一个bzip2格式的压缩包 

tar -jxvf archive.tar.bz2 解压一个bzip2格式的压缩包 

tar -cvfz archive.tar.gz dir1 创建一个gzip格式的压缩包 

tar -zxvf archive.tar.gz 解压一个gzip格式的压缩包 

zip file1.zip file1 创建一个zip格式的压缩包 

zip -r file1.zip file1 file2 dir1 将几个文件和目录同时压缩成一个zip格式的压缩包 

unzip file1.zip 解压一个zip格式压缩包 

RPM 包 - (Fedora, Redhat及类似系统) 

rpm -ivh package.rpm 安装一个rpm包 

rpm -ivh --nodeeps package.rpm 安装一个rpm包而忽略依赖关系警告 

rpm -U package.rpm 更新一个rpm包但不改变其配置文件 

rpm -F package.rpm 更新一个确定已经安装的rpm包 

rpm -e package_name.rpm 删除一个rpm包 

rpm -qa 显示系统中所有已经安装的rpm包 

rpm -qa | grep httpd 显示所有名称中包含 "httpd" 字样的rpm包 

rpm -qi package_name 获取一个已安装包的特殊信息 

rpm -qg "System Environment/Daemons" 显示一个组件的rpm包 

rpm -ql package_name 显示一个已经安装的rpm包提供的文件列表 

rpm -qc package_name 显示一个已经安装的rpm包提供的配置文件列表 

rpm -q package_name --whatrequires 显示与一个rpm包存在依赖关系的列表 

rpm -q package_name --whatprovides 显示一个rpm包所占的体积 

rpm -q package_name --scripts 显示在安装/删除期间所执行的脚本l 

rpm -q package_name --changelog 显示一个rpm包的修改历史 

rpm -qf /etc/httpd/conf/httpd.conf 确认所给的文件由哪个rpm包所提供 

rpm -qp package.rpm -l 显示由一个尚未安装的rpm包提供的文件列表 

rpm --import /media/cdrom/RPM-GPG-KEY 导入公钥数字证书 

rpm --checksig package.rpm 确认一个rpm包的完整性 

rpm -qa gpg-pubkey 确认已安装的所有rpm包的完整性 

rpm -V package_name 检查文件尺寸、 许可、类型、所有者、群组、MD5检查以及最后修改时间 

rpm -Va 检查系统中所有已安装的rpm包- 小心使用 

rpm -Vp package.rpm 确认一个rpm包还未安装 

rpm2cpio package.rpm | cpio --extract --make-directories *bin* 从一个rpm包运行可执行文件 

rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm 从一个rpm源码安装一个构建好的包 

rpmbuild --rebuild package_name.src.rpm 从一个rpm源码构建一个 rpm 包 

YUM 软件包升级器 - (Fedora, RedHat及类似系统) 

yum install package_name 下载并安装一个rpm包 

yum localinstall package_name.rpm 将安装一个rpm包,使用你自己的软件仓库为你解决所有依赖关系 

yum update package_name.rpm 更新当前系统中所有安装的rpm包 

yum update package_name 更新一个rpm包 

yum remove package_name 删除一个rpm包 

yum list 列出当前系统中安装的所有包 

yum search package_name 在rpm仓库中搜寻软件包 

yum clean packages 清理rpm缓存删除下载的包 

yum clean headers 删除所有头文件 

yum clean all 删除所有缓存的包和头文件 

DEB 包 (Debian, Ubuntu 以及类似系统) 

dpkg -i package.deb 安装/更新一个 deb 包 

dpkg -r package_name 从系统删除一个 deb 包 

dpkg -l 显示系统中所有已经安装的 deb 包 

dpkg -l | grep httpd 显示所有名称中包含 "httpd" 字样的deb包 

dpkg -s package_name 获得已经安装在系统中一个特殊包的信息 

dpkg -L package_name 显示系统中已经安装的一个deb包所提供的文件列表 

dpkg --contents package.deb 显示尚未安装的一个包所提供的文件列表 

dpkg -S /bin/ping 确认所给的文件由哪个deb包提供 

APT 软件工具 (Debian, Ubuntu 以及类似系统) 

apt-get install package_name 安装/更新一个 deb 包 

apt-cdrom install package_name 从光盘安装/更新一个 deb 包 

apt-get update 升级列表中的软件包 

apt-get upgrade 升级所有已安装的软件 

apt-get remove package_name 从系统删除一个deb包 

apt-get check 确认依赖的软件仓库正确 

apt-get clean 从下载的软件包中清理缓存 

apt-cache search searched-package 返回包含所要搜索字符串的软件包名称 

查看文件内容 

cat file1 从第一个字节开始正向查看文件的内容 

tac file1 从最后一行开始反向查看一个文件的内容 

more file1 查看一个长文件的内容 

less file1 类似于 'more' 命令,但是它允许在文件中和正向操作一样的反向操作 

head -2 file1 查看一个文件的前两行 

tail -2 file1 查看一个文件的最后两行 

tail -f /var/log/messages 实时查看被添加到一个文件中的内容 

文本处理 

cat file1 file2 ... | command <> file1_in.txt_or_file1_out.txt general syntax for text manipulation using PIPE, STDIN and STDOUT 

cat file1 | command( sed, grep, awk, grep, etc...) > result.txt 合并一个文件的详细说明文本,并将简介写入一个新文件中 

cat file1 | command( sed, grep, awk, grep, etc...) >> result.txt 合并一个文件的详细说明文本,并将简介写入一个已有的文件中 

grep Aug /var/log/messages 在文件 '/var/log/messages'中查找关键词"Aug" 

grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以"Aug"开始的词汇 

grep [0-9] /var/log/messages 选择 '/var/log/messages' 文件中所有包含数字的行 

grep Aug -R /var/log/* 在目录 '/var/log' 及随后的目录中搜索字符串"Aug" 

sed 's/stringa1/stringa2/g' example.txt 将example.txt文件中的 "string1" 替换成 "string2" 

sed '/^$/d' example.txt 从example.txt文件中删除所有空白行 

sed '/ *#/d; /^$/d' example.txt 从example.txt文件中删除所有注释和空白行 

echo 'esempio' | tr '[:lower:]' '[:upper:]' 合并上下单元格内容 

sed -e '1d' result.txt 从文件example.txt 中排除第一行 

sed -n '/stringa1/p' 查看只包含词汇 "string1"的行 

sed -e 's/ *$//' example.txt 删除每一行最后的空白字符 

sed -e 's/stringa1//g' example.txt 从文档中只删除词汇 "string1" 并保留剩余全部 

sed -n '1,5p;5q' example.txt 查看从第一行到第5行内容 

sed -n '5p;5q' example.txt 查看第5行 

sed -e 's/00*/0/g' example.txt 用单个零替换多个零 

cat -n file1 标示文件的行数 

cat example.txt | awk 'NR%2==1' 删除example.txt文件中的所有偶数行 

echo a b c | awk '{print $1}' 查看一行第一栏 

echo a b c | awk '{print $1,$3}' 查看一行的第一和第三栏 

paste file1 file2 合并两个文件或两栏的内容 

paste -d '+' file1 file2 合并两个文件或两栏的内容,中间用"+"区分 

sort file1 file2 排序两个文件的内容 

sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份) 

sort file1 file2 | uniq -u 删除交集,留下其他的行 

sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件) 

comm -1 file1 file2 比较两个文件的内容只删除 'file1' 所包含的内容 

comm -2 file1 file2 比较两个文件的内容只删除 'file2' 所包含的内容 

comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分 

字符设置和文件格式转换 

dos2unix filedos.txt fileunix.txt 将一个文本文件的格式从MSDOS转换成UNIX 

unix2dos fileunix.txt filedos.txt 将一个文本文件的格式从UNIX转换成MSDOS 

recode ..HTML < page.txt > page.html 将一个文本文件转换成html 

recode -l | more 显示所有允许的转换格式 

文件系统分析 

badblocks -v /dev/hda1 检查磁盘hda1上的坏磁块 

fsck /dev/hda1 修复/检查hda1磁盘上linux文件系统的完整性 

fsck.ext2 /dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性 

e2fsck /dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性 

e2fsck -j /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性 

fsck.ext3 /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性 

fsck.vfat /dev/hda1 修复/检查hda1磁盘上fat文件系统的完整性 

fsck.msdos /dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性 

dosfsck /dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性 

初始化一个文件系统 

mkfs /dev/hda1 在hda1分区创建一个文件系统 

mke2fs /dev/hda1 在hda1分区创建一个linux ext2的文件系统 

mke2fs -j /dev/hda1 在hda1分区创建一个linux ext3(日志型)的文件系统 

mkfs -t vfat 32 -F /dev/hda1 创建一个 FAT32 文件系统 

fdformat -n /dev/fd0 格式化一个软盘 

mkswap /dev/hda3 创建一个swap文件系统 

SWAP文件系统 

mkswap /dev/hda3 创建一个swap文件系统 

swapon /dev/hda3 启用一个新的swap文件系统 

swapon /dev/hda2 /dev/hdb3 启用两个swap分区 

备份 

dump -0aj -f /tmp/home0.bak /home 制作一个 '/home' 目录的完整备份 

dump -1aj -f /tmp/home0.bak /home 制作一个 '/home' 目录的交互式备份 

restore -if /tmp/home0.bak 还原一个交互式备份 

rsync -rogpav --delete /home /tmp 同步两边的目录 

rsync -rogpav -e ssh --delete /home ip_address:/tmp 通过SSH通道rsync 

rsync -az -e ssh --delete ip_addr:/home/public /home/local 通过ssh和压缩将一个远程目录同步到本地目录 

rsync -az -e ssh --delete /home/local ip_addr:/home/public 通过ssh和压缩将本地目录同步到远程目录 

dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr 'dd of=hda.gz' 通过ssh在远程主机上执行一次备份本地磁盘的操作 

dd if=/dev/sda of=/tmp/file1 备份磁盘内容到一个文件 

tar -Puf backup.tar /home/user 执行一次对 '/home/user' 目录的交互式备份操作 

( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr 'cd /home/share/ && tar x -p' 通过ssh在远程目录中复制一个目录内容 

( tar c /home ) | ssh -C user@ip_addr 'cd /home/backup-home && tar x -p' 通过ssh在远程目录中复制一个本地目录 

tar cf - . | (cd /tmp/backup ; tar xf - ) 本地将一个目录复制到另一个地方,保留原有权限及链接 

find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents 从一个目录查找并复制所有以 '.txt' 结尾的文件到另一个目录 

find /var/log -name '*.log' | tar cv --files-from=- | bzip2 > log.tar.bz2 查找所有以 '.log' 结尾的文件并做成一个bzip包 

dd if=/dev/hda of=/dev/fd0 bs=512 count=1 做一个将 MBR (Master Boot Record)内容复制到软盘的动作 

dd if=/dev/fd0 of=/dev/hda bs=512 count=1 从已经保存到软盘的备份中恢复MBR内容 

光盘 

cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force 清空一个可复写的光盘内容 

mkisofs /dev/cdrom > cd.iso 在磁盘上创建一个光盘的iso镜像文件 

mkisofs /dev/cdrom | gzip > cd_iso.gz 在磁盘上创建一个压缩了的光盘iso镜像文件 

mkisofs -J -allow-leading-dots -R -V "Label CD" -iso-level 4 -o ./cd.iso data_cd 创建一个目录的iso镜像文件 

cdrecord -v dev=/dev/cdrom cd.iso 刻录一个ISO镜像文件 

gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom - 刻录一个压缩了的ISO镜像文件 

mount -o loop cd.iso /mnt/iso 挂载一个ISO镜像文件 

cd-paranoia -B 从一个CD光盘转录音轨到 wav 文件中 

cd-paranoia -- "-3" 从一个CD光盘转录音轨到 wav 文件中(参数-3) 

cdrecord --scanbus 扫描总线以识别scsi通道 

dd if=/dev/hdc | md5sum 校验一个设备的md5sum编码,例如一张 CD 

网络 - (以太网和WIFI无线) 

ifconfig eth0 显示一个以太网卡的配置 

ifup eth0 启用一个 'eth0' 网络设备 

ifdown eth0 禁用一个 'eth0' 网络设备 

ifconfig eth0 192.168.1.1 netmask 255.255.255.0 控制IP地址 

ifconfig eth0 promisc 设置 'eth0' 成混杂模式以嗅探数据包 (sniffing) 

dhclient eth0 以dhcp模式启用 'eth0' 

route -n show routing table 

route add -net 0/0 gw IP_Gateway configura default gateway 

route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 configure static route to reach network '192.168.0.0/16' 

route del 0/0 gw IP_gateway remove static route 

echo "1" > /proc/sys/net/ipv4/ip_forward activate ip routing 

hostname show hostname of system 

host www.example.com lookup hostname to resolve name to ip address and viceversa

nslookup www.example.com lookup hostname to resolve name to ip address and viceversa

ip link show show link status of all interfaces 

mii-tool eth0 show link status of 'eth0' 

ethtool eth0 show statistics of network card 'eth0' 

netstat -tup show all active network connections and their PID 

netstat -tupl show all network services listening on the system and their PID 

tcpdump tcp port 80 show all HTTP traffic 

iwlist scan show wireless networks 

iwconfig eth1 show configuration of a wireless network card 

hostname show hostname 

host www.example.com lookup hostname to resolve name to ip address and viceversa 

nslookup www.example.com lookup hostname to resolve name to ip address and viceversa 

whois www.example.com lookup on Whois database 


一、系统监控

1、free命令

free 命令能够显示系统中物理上的空闲和已用内存,还有交换内存,同时,也能显示被内核使用的缓冲和缓存

 语法:free [param] 

param可以为: 

-b:以Byte为单位显示内存使用情况;

-k:以KB为单位显示内存使用情况;

-m:以MB为单位显示内存使用情况;

-o:不显示缓冲区调节列;

-s<间隔秒数>:持续观察内存使用状况;

-t:显示内存总和列;

-V:显示版本信息。 

Mem:表示物理内存统计 

total:表示物理内存总数(total=used+free)

used:表示系统分配给缓存使用的数量(这里的缓存包括buffer和cache)

free:表示未分配的物理内存总数

shared:表示共享内存

buffers:系统分配但未被使用的buffers 数量。

cached:系统分配但未被使用的cache 数量。

-/+ buffers/cache:表示物理内存的缓存统计

 (-buffers/cache) 内存数: (指的第一部分Mem行中的used – buffers – cached)

(+buffers/cache) 内存数: (指的第一部分Mem行中的free + buffers + cached)

(-buffers/cache)表示真正使用的内存数, (+buffers/cache) 表示真正未使用的内存数

 Swap:表示硬盘上交换分区的使用情况 

2、ulimit命令

ulimit用于显示系统资源限制的信息

语法:ulimit [param]

param参数可以为: 

-a  显示目前资源限制的设定。

-c <core文件上限>  设定core文件的最大值,单位为区块。

-d <数据节区大小>  程序数据节区的最大值,单位为KB。

-f <文件大小>  shell所能建立的最大文件,单位为区块。

-H  设定资源的硬性限制,也就是管理员所设下的限制。

-m <内存大小>  指定可使用内存的上限,单位为KB。

-n <文件数目>  指定同一时间最多可开启的文件数。

-p <缓冲区大小>  指定管道缓冲区的大小,单位512字节。

-s <堆叠大小>  指定堆叠的上限,单位为KB。

-S  设定资源的弹性限制。

-t <CPU时间>  指定CPU使用时间的上限,单位为秒。

-u <程序数目>  用户最多可开启的程序数目。

-v <虚拟内存大小>  指定可使用的虚拟内存上限,单位为KB

3、top命令

top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具

 语法:top [param]

param为: 

-b:以批处理模式操作;

-c:显示完整的治命令;

-d:屏幕刷新间隔时间;

-I:忽略失效过程;

-s:保密模式;

-S:累积模式;

-u [用户名]:指定用户名;

-p [进程号]:指定进程;

-n [次数]:循环显示的次数。

4、df命令 :df -h查看磁盘使用情况 ;df -i 查看inode使用情况

5、ps命令 :ps命令用于查看进程统计信息 

常用参数: 

a:显示当前终端下的所有进程信息,包括其他用户的进程。

u:使用以用户为主的格式输出进程信息。

x:显示当前用户在所有终端下的进程。

-e:显示系统内的所有进程信息。

-l:使用长(long)格式显示进程信息。

-f:使用完整的(full)格式显示进程信息。

在使用中可以加上grep命令一起使用,也可以单独使用 

# ps命令单独使用的情况 :ps -elf tomcat

#结合管道操作和grep命令进行过滤,用于查询某一个进程的信息 :ps -elf | grep tomcat

二、文件操作

1、tail命令

tail 命令可用于查看文件的内容,语法为 :tail [param] [filename]

其中param可为: 

-f :循环读取

-q :不显示处理信息

-v :显示详细的处理信息

-c [数目]: 显示的字节数

-n [行数]: 显示文件的尾部 n 行内容

–pid=PID :与-f合用,表示在进程ID,PID死掉之后结束

-q, --quiet, --silent :从不输出给出文件名的首部

-s, --sleep-interval=S :与-f合用,表示在每次反复的间隔休眠S秒

2、ll -ah :ll -ah命令,可以用于查看文件情况 ll -ah

三、网络通信

1、netstat

netstat命令是用于监控进出网络的包和网络接口统计的命令行工具 :语法:netstat [param] 

param参数可以为:-h : 查看帮助 -r : 显示路由表 -i : 查看网络接口 2、重启网络

设置了linux网络,需要重启网络,可以用命令:service network restart  

3、SELinux

SELinux全称是 Security-Enhanced Linux,它是由美国国家安全局(NSA)贡献的,它为 Linux 内核子系统引入了一个健壮的强制控制访问Mandatory Access Control架构。详情可以参考SELinux 入门,SELINUX工作原理 

其实SELinux的功能也就是类似于防火墙的功能,不过安全相对比较好,ok,所以本博客介绍一下SELinux的使用命令

 查看selinux状态  : getenforce

 临时禁用SELINUX(学习用的linux才可以禁用,生产的不建议禁用SELINUX) : setenforce

 永久禁用SELINUX(学习用的linux才可以禁用,生产的不建议禁用SELINUX)

  # 将SELINUX=enforce改成SELINUX=disabled

 vi /etc/selinux/config 

4、防火墙

查询linux系统防火墙开启状态 : firewall-cmd --state

 临时关闭防火墙(学习用的linux才可以禁用,生产的不建议禁用SELINUX) : systemctl stop firewalld.service 

永久关闭防火墙(学习用的linux才可以禁用,生产的不建议禁用SELINUX)  :systemctl disable firewalld.service 

四、系统管理

1、uname :uname命令用于查看内核版本 

2、ip addr :查看linux的ip地址:可以用命令  ip addr


2025-11-21 09:50

查询sqlserver表大小

--itlearner注:显示表信息

select *  from tablespaceinfo order by cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as int) desc

 --在查询分析器中运行

if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tablespaceinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

create table tablespaceinfo --创建结果存储表

(nameinfo varchar(50) , 

rowsinfo int , reserved varchar(20) , 

datainfo varchar(20) , 

index_size varchar(20) , 

unused varchar(20) ) 

delete from tablespaceinfo --清空数据表 

declare @tablename varchar(255) --表名称 

declare @cmdsql varchar(500) 

DECLARE Info_cursor CURSOR FOR select o.name from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsTable') = 1 

and o.name not like N'#%%' order by o.name 

OPEN Info_cursor 

FETCH NEXT FROM Info_cursor INTO @tablename 

 WHILE @@FETCH_STATUS = 0

BEGIN 

if exists (select * from dbo.sysobjects where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1)

execute sp_executesql 

N'insert into tablespaceinfo exec sp_spaceused @tbname',

N'@tbname varchar(255)',

@tbname = @tablename 

FETCH NEXT FROM Info_cursor INTO @tablename 

END 

CLOSE Info_cursor

DEALLOCATE Info_cursor

GO


2025-11-21 09:23

修正sqlserver索引错误

DBCC UPDATEUSAGE(ufdata_808_2002);

运行位置:查询分析器

主要用途: 意外关机或者日志被删除后,表发生紊乱,表保留空间过多,可使用本方法。使用后再进行数据库收缩,可缩小10%空间,并提高速度。基本每个数据库都有错误。 

我单位用友数据库就是出现骉紊乱的情况,使用本命令就可以解决问题。 



2025-11-21 09:21

sqlserver 多表查询

UPDATE RP_bankrecp SET RP_bankrecp.iflag = rp_bankrecp_2011.iflag FROM RP_bankrecp LEFT JOIN       RP_bankrecp_2011 ON RP_bankrecp.i_id = RP_bankrecp_2011.i_id 

update table1 set table1.field1=table2.field2 from table1 left join table2 on table1.fieldX=table2.fieldy


2025-11-21 09:20

用友问题:发票参照发货单可以修改,但无法保存的问题

用友T6、U8都存在的问题,发票参照发货单可以修改,但无法保存的问题。 检查表SA_INIMain中,因为用友T6将单据参照竟然按照使用者的电脑来进行存储, 换电脑了,定义的参照就不好用了。不得不说是个很不方便的地方,而且一旦有人操作销售模块,立马提示:有人在使用。 到这里进行修改就行了。修改ibilldef字段的值就可以了。 其他发票、发货单、退货单参照都在这里进行修改

2025-11-21 09:19

解决用友固定资产出现的“不能月末结账,可能月末未结账”的处理办法

用友官方处理的很粗暴,就是你操作的不对,按照他的要求来就是了。

但其实这个问题在用友固定资产中很常见,因为用友固定资产编写的太糟糕了,对异常处理的很粗,比方你在3月份中以2月份的日期进行查询或者处理,就很容易导致出现这种情况。

查看数据库发现,最后一次折旧日期哪里的date类型的数据里,填写竟然是00:00:00,问题找到了,那么你只需要把时间删除,填写最后一个提折旧的日期就好了,你会发现问题就得到解决。

另外你要看两个月份哪里是否正常:一个是最后一次提折旧的月份,一个是最新的日期月份,是否和你的实际业务相符。

相关的查询语句为:select * from accinformation where csysid like ‘fa’ ,这样里面的数据就很好找了。

2025-11-21 09:19

用友打印设置修改后,预览没有变化:

设置打印模板后预览没有变化

原因分析:操作员在进行打印预览时如果在预览界面选择“保存当前设置”,此时会在C盘下生成一个XML格式的文件,无论如何修改单据打印模板,预览调取的都是保存在C盘下的XML格式的文件。

问题解答:将C:\WINDOWS\system32\UFCOMSQL\PrintSetting 中对应的XML文件删除后,在进行单据预览,即可按照修改后的单据模板效果显示。

提示:在用友T6中,VoucherTemplates 表是负责单据显示和打印的题目,如果新增单据,其中vt_id可以设置为最大+1, 其中字段vt_templatemode=1 表示的是打印模板,指向VoucherItems_Prn表,vt_templatemode=0,则是指向 VoucherItems表


2025-11-21 09:14

linux ssh 

linux下登录日志在下面的目录里: 

cd /var/log 

查看ssh用户的登录日志: 

less secure 

linux日志管理: 

1. 日志简介 

日志对于安全来说,非常重要,他记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志主要的功能有:审计和监测。他还可以实时的监测系统状态,监测和追踪侵入者等等。 

在Linux系统中,有三个主要的日志子系统: 

连接时间日志--由多个程序执行,把纪录写入到/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和 utmp文件,使系统管理员能够跟踪谁在何时登录到系统。进程统计--由系统内核执行。当一个进程终止时,为每个进程往进程统计文件(pacct或acct)中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。

错误日志--由syslogd(8)执行。各种系统守护进程、用户程序和内核通过syslog(3)向文件/var/log/messages报告值得注意的事件。另外有许多UNIX程序创建日志。像HTTP和FTP这样提供网络服务的服务器也保持详细的日志。 常用的日志文件如下: 

access-log 纪录HTTP/web的传输 

acct/pacct 纪录用户命令 

aculog 纪录MODEM的活动 

btmp 纪录失败的纪录 

lastlog 纪录最近几次成功登录的事件和最后一次不成功的登录 

messages 从syslog中记录信息(有的链接到syslog文件)

sudolog 记录使用sudo发出的命令 

sulog 记录使用su命令的使用 

syslog 从syslog中记录信息(通常链接到messages文件) 

utmp 记录当前登录的每个用户 

wtmp 一个用户每次登录进入和退出时间的永久纪录 

xferlog 记录FTP会话 

utmp、wtmp和lastlog日志文件是多数重用UNIX日志子系统的关键--保持用户登录进入和退出的纪录。有关当前登录用户的信息记录在文件utmp中;登录进入和退出纪录在文件wtmp中;最后一次登录文件可以用lastlog命令察看。数据交换、关机和重起也记录在wtmp文件中。所有的纪录都包含时间戳。这些文件(lastlog通常不大)在具有大量用户的系统中增长十分迅速。例如wtmp文件可以无限增长,除非定期截取。许多系统以一天或者一周为单位把wtmp配置成循环使用。它通常由cron运行的脚本来修改。这些脚本重新命名并循环使用wtmp文件。通常,wtmp在第一天结束后命名为wtmp.1;第二天后wtmp.1变为wtmp.2等等,直到wtmp. 7。 

每次有一个用户登录时,login程序在文件lastlog中察看用户的UID。如果找到了,则把用户上次登录、退出时间和主机名写到标准输出中,然后login程序在lastlog中纪录新的登录时间。在新的lastlog纪录写入后,utmp文件打开并插入用户的utmp纪录。该纪录一直用到用户登录退出时删除。utmp文件被各种命令文件使用,包括who、w、users和finger。 

下一步,login程序打开文件wtmp附加用户的utmp纪录。当用户登录退出时,具有更新时间戳的同一utmp纪录附加到文件中。wtmp文件被程序last和ac使用。 

2. 具体命令 

wtmp和utmp文件都是二进制文件,他们不能被诸如tail命令剪贴或合并(使用cat命令)。用户需要使用who、w、users、last和ac来使用这两个文件包含的信息。 

who:who命令查询utmp文件并报告当前登录的每个用户。Who的缺省输出包括用户名、终端类型、登录日期及远程主机。例如:who(回车)显示 

ynguo pts/7 Aug 18 14:12 

ylou pts/8 Aug 18 14:15 

如果指明了wtmp文件名,则who命令查询所有以前的纪录。命令who /var/log/wtmp把报告自从wtmp文件创建或删改以来的每一次登录。 

w:w命令查询utmp文件并显示当前系统中每个用户和它所运行的进程信息。例如:w(回车)显示:3:36pm up 1 day, 22:34, 6 users, load average: 0.23, 0.29, 0.27 

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT 

chyang pts/0 202.38.68.242 3:06pm 2:04 0.08s 0.04s -bash 

ynguo pts/2 202.38.79.47 3:32pm 0.00s 0.14s 0.05 w 

ylou pts/8 202.38.64.235 2:15pm 1:09m 0.10s 0.04s -bash 

users:users用单独的一行打印出当前登录的用户,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名把显示相同的次数。例如:users(回车)显示:chyang lewis lewis ylou ynguo ynguo 

last:last命令往回搜索wtmp来显示自从文件第一次创建以来登录过的用户。例如: 

chyang pts/9 202.38.68.242 Tue Aug 1 08:34 - 11:23 (02:49) 

cfan pts/6 202.38.64.224 Tue Aug 1 08:33 - 08:48 (00:14) 

chyang pts/4 202.38.68.242 Tue Aug 1 08:32 - 12:13 (03:40) 

lewis pts/3 202.38.64.233 Tue Aug 1 08:06 - 11:09 (03:03) 

lewis pts/2 202.38.64.233 Tue Aug 1 07:56 - 11:09 (03:12) 

linux查看日志: 

# cd /var/log 

# less secure 

或者 

# less messages 

最近登录的日志: 

# last 



2025-11-21 09:13

LINUX命令

1、查看当前目录下所有文档的内容行数   :    wc -l *


2、查看当前目录下所有文档的大小   :   du -sh *


3、后台启动Python脚本输出日志到文件,查看日志文件


4、查看服务器磁盘使用情况


df -h


5、查看服务器内存状况


free -g


6、查看当前目录下文件数量


ls -l |grep "^-"|wc -l


7、查看运行这的Python进程 , 并杀掉指定进程


ps -ef | grep python3


kill -9  进程号


8、显示脚本当前光标所在行号


切换到命令行模式nu


9、显示脚本所有行号


命令行模式下set nu


10、统计当前目录下的文件个数:


ls -l | grep "^-" | wc -l


11、统计当前目录下的目录个数:


ls -l | grep "^d" | wc -l


12、统计当前目录下的文件个数,包括子目录中的(R必须大写,否则无效)


ls -lR | grep "^-"|wc -l


13、统计当前目录下的目录个数,包括所有子目录中


ls -lR | grep "^d" | wc -l


14、批量替换文件指定内容


find -name 'nohup.out' | xargs perl -pi -e 's|old_str|new_str|g'


find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g'


2025-11-21 09:04

flask基础

 

一、配置文件

Flask的配置文件 

app.config     Config对象的本质是一个字典

flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为:
    {
        'DEBUG':                                get_debug_flag(default=False),  是否开启Debug模式
        'TESTING':                              False,                          是否开启测试模式
        'PROPAGATE_EXCEPTIONS':                 None,                          
        'PRESERVE_CONTEXT_ON_EXCEPTION':        None,
        'SECRET_KEY':                           None,
        'PERMANENT_SESSION_LIFETIME':           timedelta(days=31),
        'USE_X_SENDFILE':                       False,
        'LOGGER_NAME':                          None,
        'LOGGER_HANDLER_POLICY':               'always',
        'SERVER_NAME':                          None,
        'APPLICATION_ROOT':                     None,
        'SESSION_COOKIE_NAME':                  'session',
        'SESSION_COOKIE_DOMAIN':                None,
        'SESSION_COOKIE_PATH':                  None,
        'SESSION_COOKIE_HTTPONLY':              True,
        'SESSION_COOKIE_SECURE':                False,
        'SESSION_REFRESH_EACH_REQUEST':         True,
        'MAX_CONTENT_LENGTH':                   None,
        'SEND_FILE_MAX_AGE_DEFAULT':            timedelta(hours=12),
        'TRAP_BAD_REQUEST_ERRORS':              False,
        'TRAP_HTTP_EXCEPTIONS':                 False,
        'EXPLAIN_TEMPLATE_LOADING':             False,
        'PREFERRED_URL_SCHEME':                 'http',
        'JSON_AS_ASCII':                        True,
        'JSON_SORT_KEYS':                       True,
        'JSONIFY_PRETTYPRINT_REGULAR':          True,
        'JSONIFY_MIMETYPE':                     'application/json',
        'TEMPLATES_AUTO_RELOAD':                None,
    }

 

修改配置的方式

方式一:

app.config["参数"] = value

app.secret_key = value

'''修改配置文件方式一'''
print(app.config.get('DEBUG'))      # False
app.config['DEBUG'] = True   # 修改配置文件的DEBUG属性
print(app.config.get('DEBUG'))      # True

 

方式二:

app.config.from_pyfile("python文件名称")
    如:
        settings.py
            DEBUG = True
    app.config.from_pyfile("settings.py")

app.config.from_envvar("环境变量名称") 环境变量的值为python文件名称名称,内部调用from_pyfile方法

app.config.from_json("json文件名称") JSON文件名称,必须是json格式,因为内部会执行json.loads

app.config.from_mapping({'DEBUG':True}) 字典格式

app.config.from_object("python类或类的路径")

app.config.from_object("settings.MySetting")        # settings.py的MySetting类</pre><p style="outline: 0px; margin-right: 0px; margin-bottom: 16px; margin-left: 0px; padding: 0px; color: rgb(77, 77, 77); overflow: auto hidden; font-synthesis-style: auto; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; line-height: 24px !important;">&nbsp;</p><p style="outline: 0px; margin-right: 0px; margin-bottom: 16px; margin-left: 0px; padding: 0px; color: rgb(77, 77, 77); overflow: auto hidden; font-synthesis-style: auto; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; line-height: 24px !important;">&nbsp;</p><p style="outline: 0px; margin-right: 0px; margin-bottom: 16px; margin-left: 0px; padding: 0px; color: rgb(77, 77, 77); overflow: auto hidden; font-synthesis-style: auto; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; line-height: 24px !important;"><span style="outline: 0px; font-weight: 700; font-synthesis-style: auto; overflow-wrap: break-word;">二、路由</span></p><ul style="outline: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding: 0px; list-style: none; font-synthesis-style: auto; overflow-wrap: break-word; color: rgb(51, 51, 51); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun;"><li style="outline: 0px; margin: 8px 0px 0px 32px; padding: 0px; list-style: disc; font-synthesis-style: auto; overflow-wrap: break-word;">@app.route('/user/&lt;username&gt;')</li><li style="outline: 0px; margin: 8px 0px 0px 32px; padding: 0px; list-style: disc; font-synthesis-style: auto; overflow-wrap: break-word;">@app.route('/post/&lt;int:post_id&gt;')</li><li style="outline: 0px; margin: 8px 0px 0px 32px; padding: 0px; list-style: disc; font-synthesis-style: auto; overflow-wrap: break-word;">@app.route('/post/&lt;float:post_id&gt;')</li><li style="outline: 0px; margin: 8px 0px 0px 32px; padding: 0px; list-style: disc; font-synthesis-style: auto; overflow-wrap: break-word;">@app.route('/post/&lt;path:path&gt;')</li><li style="outline: 0px; margin: 8px 0px 0px 32px; padding: 0px; list-style: disc; font-synthesis-style: auto; overflow-wrap: break-word;">@app.route('/login', methods=['GET', 'POST'])</li></ul><p style="outline: 0px; margin-right: 0px; margin-bottom: 16px; margin-left: 0px; padding: 0px; color: rgb(77, 77, 77); overflow: auto hidden; font-synthesis-style: auto; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; line-height: 24px !important;">常用路由系统有以上五种,所有的路由系统都是基于一下对应关系来处理:</p><p style="outline: 0px; margin-right: 0px; margin-bottom: 16px; margin-left: 0px; padding: 0px; color: rgb(77, 77, 77); overflow: auto hidden; font-synthesis-style: auto; overflow-wrap: break-word; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun; line-height: 24px !important;">转换器类型,为变量指定规则:</p><div class="table-box" style="outline: 0px; margin: 0px 0px 24px; padding: 0px; font-synthesis-style: auto; overflow-wrap: break-word; overflow-x: auto; color: rgb(51, 51, 51); font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif, SimHei, SimSun;"><table border="1" style="outline: 0px; border-spacing: 0px; width: 962px; margin-bottom: 0px; margin-left: auto; margin-right: auto; font-synthesis-style: auto; overflow-wrap: break-word;"><tbody style="outline: 0px; border-style: initial; border-color: initial; border-image: initial; font-synthesis-style: auto; overflow-wrap: break-word;"><tr style="outline: 0px; border-top-width: 1px; border-right-style: initial; border-bottom-style: initial; border-left-style: initial; border-right-color: initial; border-bottom-color: initial; border-left-color: initial; border-image: initial; border-top-color: rgb(221, 221, 221); font-synthesis-style: auto; overflow-wrap: break-word;"><td style="outline: 0px; padding: 8px; margin: 0px; font-synthesis-style: auto; overflow-wrap: break-word; border-color: rgb(221, 221, 221); font-size: 14px; color: rgb(79, 79, 79); line-height: 22px;"><code style="outline: 0px; border-radius: 4px; font-synthesis-style: auto; word-break: break-word;">string</code></td><td style="outline: 0px; padding: 8px; margin: 0px; font-synthesis-style: auto; overflow-wrap: break-word; border-color: rgb(221, 221, 221); font-size: 14px; color: rgb(79, 79, 79); line-height: 22px;">(缺省值) 接受任何不包含斜杠的文本</td></tr><tr style="outline: 0px; border-top-width: 1px; border-right-style: initial; border-bottom-style: initial; border-left-style: initial; border-right-color: initial; border-bottom-color: initial; border-left-color: initial; border-image: initial; border-top-color: rgb(221, 221, 221); background-color: rgb(247, 247, 247); font-synthesis-style: auto; overflow-wrap: break-word;"><td style="outline: 0px; padding: 8px; margin: 0px; font-synthesis-style: auto; overflow-wrap: break-word; border-color: rgb(221, 221, 221); font-size: 14px; color: rgb(79, 79, 79); line-height: 22px;"><code style="outline: 0px; border-radius: 4px; font-synthesis-style: auto; word-break: break-word;">int</code></td><td style="outline: 0px; padding: 8px; margin: 0px; font-synthesis-style: auto; overflow-wrap: break-word; border-color: rgb(221, 221, 221); font-size: 14px; color: rgb(79, 79, 79); line-height: 22px;">接受正整数</td></tr><tr style="outline: 0px; border-top-width: 1px; border-right-style: initial; border-bottom-style: initial; border-left-style: initial; border-right-color: initial; border-bottom-color: initial; border-left-color: initial; border-image: initial; border-top-color: rgb(221, 221, 221); font-synthesis-style: auto; overflow-wrap: break-word;"><td style="outline: 0px; padding: 8px; margin: 0px; font-synthesis-style: auto; overflow-wrap: break-word; border-color: rgb(221, 221, 221); font-size: 14px; color: rgb(79, 79, 79); line-height: 22px;"><code style="outline: 0px; border-radius: 4px; font-synthesis-style: auto; word-break: break-word;">float</code></td><td style="outline: 0px; padding: 8px; margin: 0px; font-synthesis-style: auto; overflow-wrap: break-word; border-color: rgb(221, 221, 221); font-size: 14px; color: rgb(79, 79, 79); line-height: 22px;">接受正浮点数</td></tr><tr style="outline: 0px; border-top-width: 1px; border-right-style: initial; border-bottom-style: initial; border-left-style: initial; border-right-color: initial; border-bottom-color: initial; border-left-color: initial; border-image: initial; border-top-color: rgb(221, 221, 221); background-color: rgb(247, 247, 247); font-synthesis-style: auto; overflow-wrap: break-word;"><td style="outline: 0px; padding: 8px; margin: 0px; font-synthesis-style: auto; overflow-wrap: break-word; border-color: rgb(221, 221, 221); font-size: 14px; color: rgb(79, 79, 79); line-height: 22px;"><code style="outline: 0px; border-radius: 4px; font-synthesis-style: auto; word-break: break-word;">path</code></td><td style="outline: 0px; padding: 8px; margin: 0px; font-synthesis-style: auto; overflow-wrap: break-word; border-color: rgb(221, 221, 221); font-size: 14px; color: rgb(79, 79, 79); line-height: 22px;">类似&nbsp;<code style="outline: 0px; border-radius: 4px; font-synthesis-style: auto; word-break: break-word;">string</code>&nbsp;,但可以包含斜杠</td></tr><tr style="outline: 0px; border-top-width: 1px; border-right-style: initial; border-bottom-style: initial; border-left-style: initial; border-right-color: initial; border-bottom-color: initial; border-left-color: initial; border-image: initial; border-top-color: rgb(221, 221, 221); font-synthesis-style: auto; overflow-wrap: break-word;"><td style="outline: 0px; padding: 8px; margin: 0px; font-synthesis-style: auto; overflow-wrap: break-word; border-color: rgb(221, 221, 221); font-size: 14px; color: rgb(79, 79, 79); line-height: 22px;"><code style="outline: 0px; border-radius: 4px; font-synthesis-style: auto; word-break: break-word;">uuid</code></td><td style="outline: 0px; padding: 8px; margin: 0px; font-synthesis-style: auto; overflow-wrap: break-word; border-color: rgb(221, 221, 221); font-size: 14px; color: rgb(79, 79, 79); line-height: 22px;">接受 UUID 字符串</td></tr></tbody></table></div><pre data-index="3" class="new-version hljs set-code-show" name="code" style="outline: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding: 36px 8px 8px; position: relative; overflow-y: hidden; color: rgb(180, 180, 180); background: rgb(250, 250, 250); text-wrap-mode: wrap; overflow-wrap: break-word; font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; max-height: unset; border-radius: 5px; font-synthesis-style: auto;">DEFAULT_CONVERTERS = {
'default':          UnicodeConverter,
'string':           UnicodeConverter,
'any':              AnyConverter,
'path':             PathConverter,
'int':              IntegerConverter,
'float':            FloatConverter,
'uuid':             UUIDConverter,

}

示例:

from flask import Flask,redirect,url_for

app = Flask(name)

endpoint 指向函数的名字

@app.route("/book/<int:newid>",endpoint="book") def book(newid): print(newid,type(newid)) # 123 <class 'int'> return "Book页面"

methods= 指定请求方式的列表

@app.route("/",methods=['GET','POST'])
def index(): return redirect(url_for("book",newid=123)) # 反向解析

if name == 'main': app.run()

 

访问的URL

1.URL 是中规中举的,尾部有一个斜杠,看起来就如同一个文件夹。 访问一个没有斜杠结尾的 URL 时 Flask 会自动进行重定向,帮你在尾部加上一个斜杠。

2. URL 没有尾部斜杠,因此其行为表现与一个文件类似。如果访问这个 URL 时添加了尾部斜杠就会得到一个 404 错误。这样可以保持 URL 唯一,并帮助 搜索引擎避免重复索引同一页面。

 

三、静态文件

动态的 web 应用也需要静态文件,一般是 CSS 和 JavaScript 文件。理想情况下你的 服务器已经配置好了为你的提供静态文件的服务。但是在开发过程中, Flask 也能做好 这项工作。只要在你的包或模块旁边创建一个名为 static的文件夹就行了。 静态文件位于应用的 /static 中。

使用特定的 'static' 端点就可以生成相应的 URL

url_for('static', filename='style.css') 

这个静态文件在文件系统中的位置应该是 static/style.css 。

 

四、请求和响应

导入request和Response

from flask import Flask,request,Response

# 请求相关信息

request.method

request.args

request.form

request.values

request.cookies

request.headers

request.path

request.full_path

request.script_root

request.url

request.base_url

request.url_root

request.host_url

request.host

request.files

obj = request.files['the_file_name']

obj.save('/var/www/uploads/' + secure_filename(f.filename))

响应相关信息

return "字符串"

return render_template('html模板路径',**{})

return redirect('/index.html')

response = make_response(render_template('index.html'))

response是flask.wrappers.Response类型

response.delete_cookie('key')

response.set_cookie('key', 'value')

response.headers['X-Something'] = 'A value'

return response

示例:

from flask import Flask

from flask import request,Response from flask import render_template from flask import make_response

app = Flask(name)

@app.route("/") def index(): print(request.method) # 请求 ''' 自定义响应 ''' response = make_response(render_template("index.html")) response.set_cookie("key","value") # 响应设置cookie return response

# return render_template("index.html")        # 响应

if name == 'main': app.run()

 

五、模板

1、模板的使用

Flask使用的是Jinja2模板,所以其语法和Django无差别

2、自定义模板方法

Flask中自定义模板方法的方式和Bottle相似,创建一个函数并通过参数的形式传入render_template

'''示例一'''
from flask import Flask
from flask import url_for
from flask import render_template

app = Flask(name)

book_list = [ {"id":1,"title":"python1"}, {"id":2,"title":"python2"}, {"id":3,"title":"python3"}, ]

@app.route("/book") def book(): return render_template("book.html",book_list=book_list)

if name == 'main': app.run()

<!--book.html-->
<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Title</title>
</head>
<body>

{% for book in book_list %} <p> {{book.title}}</p> {% endfor %}

</body> </html>

实例1的HTML

 

 

'''实例二'''
from flask import Flask
from flask import render_template

app = Flask(name)

mydict = {'key':"value"}

def myfunc(): return "<h1>函数返回的内容</h1>"

@app.route('/test') def test(): return render_template("test.html",**{"mydict":mydict,"myfunc":myfunc}) # 传入的字典需要打散

if name == 'main': app.run()

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Title</title>
</head>
<body>
<p>{{mydict.get('key')}}0</p>
<p>{{mydict["key"]}}1</p>
{{myfunc()|safe}}
</body>
</html>

实例2的HTML

2025-11-21 09:03

php调用linux命令

1、exec函数

  <?php

  $test = "ls /tmp/test"; //ls是linux下的查目录,文件的命令

  exec($test,$array); //执行命令

  print_r($array);

  ?>


  2、system函数

  <?php

  $test = "ls /tmp/test";

  $last = system($test);

  print "last: $last\n";

  ?>

  3、passthru函数

  <?php

  $test = "ls /tmp/test";

  passthru($test);

  ?>

  4、popen函数

  <?php

  $test = "ls /tmp/test";

  $fp = popen($test,"r"); //popen打一个进程通道

  while (!feof($fp)) { //从通道里面取得东西

  $out = fgets($fp, 4096);

  echo $out; //打印出来

  }

  pclose($fp);

  ?>

  5、proc_open函数

  <?php

  $test = "ls /tmp/test";

  $arrayarray = array(

  array("pipe","r"), //标准输入

  array("pipe","w"), //标准输出内容

  array("pipe","w") //标准输出错误

  );

  $fp = proc_open($test,$array,$pipes); //打开一个进程通道

  echo stream_get_contents($pipes[1]); //为什么是$pipes[1],因为1是输出内容

  proc_close($fp);

  ?>

  6、proc_open函数

  <?php

  $test = "ls /tmp/test";

  $arrayarray = array(

  array("pipe","r"), //标准输入

  array("pipe","w"), //标准输出内容

  array("pipe","w") //标准输出错误

  );

  $fp = proc_open($test,$array,$pipes); //打开一个进程通道

  echo stream_get_contents($pipes[1]); //为什么是$pipes[1],因为1是输出内容

  proc_close($fp);

  ?>

  7、shell_exec函数

  <?php

  $test = "ls /tmp/test";

  $out = shell_exec($test);

  echo $out;

  ?>


2025-11-21 09:02

问题描述:用友多个版本的固定资产处理模块“处理”菜单中的项目会消失大半


问题分析:日期格式不同导致的,属于软件bug,客户端区域修改日期格式为长格式

用友T6固定资产模块处理菜单中的项目会突然消失

解决办法:首先进入数据库,accinformation中,执行:

SELECT *

FROM AccInformation

WHERE (cName LIKE 'dWritableDate') OR

      (cName LIKE 'iLastPeriod')


将最新会计期间改为:3


将最新会计日期改为:2021-03-01 


以上根据具体情况进行修改。


2025-11-21 09:00

jiaja2 操作

数学运算       +, -, *, /, **, //, %等数学运算符都支持.

逻辑运算       and, or, not也同样支持

1.   in 判断元素是否在集合中

2.   | 管道操作符, 默认使用Apply调用一个方法

3.   ~  字符串连接

4    ()  调用可调用对象

5.   . 和 [ ]获取属性

6.   三元操作: value1 if expression else value2支持

7.   内建filter: (对于内建filter的别名, 可以在jinja2的filters.py文件中查找)

8.   abs(number)  返回一个值的绝对值

9.   batch(value, lincount, fill_with = None): 接 受的value是一个序列对象, linecount表明个数, 最后生成一个列表, 列表个数为linecount, 如果提供的value长度小于 linecount, 不足的使用fill_with填充

10.  capitalize(string): 接受一个字符串, 将其转换为首字母大写, 其他字母小写的形式返回

11.  center(value, width = 80): 接受一个字符串, 将其至于80的长度中居中, 不足的字符使用空格填充

12.  default(value, default_value = u””, boolean = False): 返回value指定的变量的值, 如果value是Undefined那么返回default_value指定的值, boolean意义未知

13.  dictsort(value, case_sensitive = False, by = ‘key’): value 为要遍历的字典, case_sensitive指示是否立即加载, 设置为False表示延时加载, by表示以什么排序, 可以通过设置 by = ‘value’来以值排序.

14.  escape(string): 返回一个转码的安全HTML

15.  filesizeformat(value): 接受一个数值, 返回人易读的文件大小表示.

16.  first(sequence): 返回序列的第一个元素

17.  float(value, default = 0.0): 将接受到的value转换成float类型, 如果转换失败返回指定的default值

18.  forceescape(value): 强制进行HTML转码, 也就是说不检查要转码的字符串是否是标记为安全的,这样可能会发生二次转码

19.  format(value, *attribute): 类似于字符串格式化’%d     %s’这样的功能value是格式定义, attribute不定参数接受占位符代表的值.

20.  groupby(value, attribute): 按照指定的共有属性将集合进行分组, 返回元组组成的列表, 元组中第一个元素是用来分组的属性的值, 第二个元素是分组得到的所有原集合元素的列表.

21.  indent(string, width = 4, indentfirst = False): 将接受到的string, 每行缩进width指定的字符数, indentfirst用来指定首行是否缩进.

22.  int(value, default = 0): 将接受到的value转换成int型, 如果转换失败, 返回default指定的值

23.  join(value, d = u””): 接受一个序列类型的对象, 向序列中进行插空d指定的字符串返回一个字符串

24.  last(seq): 返回指定序列的最后一个元素

25.  length(obj): 返回序列或者字典的项数

26.  list(value): 将接受到的value转换成一个list

27.  lower(string): 将接受到的字符串转换成小写形式.

28.  pprint(value, verbose = False): 漂亮的打印一个变量的值, 多用于调试, verbose表示是否显示冗长的信息

29.  random(seq): 接受一个序列对象, 随机返回其中的一个元素

30.  replace(string, old, new, count = None): 接受一个字符串, 将其中的old表示的子串替换成new指定的子串, 从左到右替换count次, 如果count不指定, 则替换一次

31.  reverse(value): 接受一个可迭代对象, 返回逆序的迭代器

32.  round(value, precision = 0, method = ‘common’): 舍 去运算, 接受一个值, precision表示精度(小数点后保留几位), method可以取值common | ceil | floor, 分别 表示四舍五入 | 进位 | 舍去

33.  safe(value): 标记传入的value值是安全的, 使用escape转码时不会发生二次转码

34.  slice(value, slices, fill_width = None): 切片, 接受一个可迭代对象, 返回slices指定的前n个元素, 不足n个使用fill_width指定的对象进行填充

35.  sort(value, reverse = False): 接受一个序列对象, 进行排序, reverse指定是否逆序

36.  string(obj): 接受一个对象, 转换成一个string字符串

37.  striptags(values): 接受一个字符串, 剥离SGML/XML标签, 并且将多个空白字符转换成单空格

38.  sum(sequence, start = 0): 接受一个序列对象, 返回序列对象的元素和start的总和, 如果指定的序列对象是空的, 就返回start指定的值

39.  title(string): 将接受到的字符串转换成标题模式, 即每个单词的首字母大写

40.  trim(value): 去掉字符串开始和末尾多余的空白字符

41.  truncate(string, length = 255, killwords = False, end = “…”): 切 断接受到的字符串, 截取前length个字符, 如果字符串比length长, 切断后追加end指定的字符串, 如果 killwords = True可以返回, 如果killwords = False不会有任何输出, 不明白.

42.  upper(string) 把接受到的字符串转成大写

43.  urlize(value, trim_url_limit = None, nofollow = False): 接 受一个url, 转换成一个标签表示的link, 这个link的href为传入的url, innerText是url截取前 trim_url_limit个字符, nofollow设置为true时, 会为这个link加入一个属性 rel=’nofollow’

 44.  wordcount(string): 计算string中的单词数

 45.  wordwrap(string, width = 79, break_long_words = True): 返 回经过包装的width指定宽度的字符, 也就是说每读取width个字符就会换行. , break_long_words表明在获取到width个字 符之后, 如果一个单词还没有结束, 是否截断单词, False将不会截断

 46.  xmlattr(d, autospace = True): 通过接受一个字典, 创建一个SGML/XML属性列表, 例如:   

          可以得到输出   

            字典中指定的值为none的, 将不会被解析成标签属性.


      23 内建测试:

       23.1 callable(object): 测试一个对象是否是可调用对象

       23.2 defined(value): 测试传入的对象是否已经定义了

       23.3 divisibleby(value, num)测试传入的数值是否可以被num整除

       23.4 escaped(value): 检查传入的对象是否被转码了

       23.5 even(value): 如果传入的对象是even的返回True,  不懂even是什么样的对象

       23.6 iterable(value): 检查对象是否是可迭代的

       23.7 lower(value): 检查传入的字符串是否都是小写

       23.8 none(value): 检查对象是否是空对象None

       23.9 number(value): 检查对象是否是一个数字

       23.10 odd(value): 检查传入的数字是否是奇数

       23.11 sameas(value, other): 检查传入的对象和other指定的对象是否在内存中的同一块地址(同一个对象)

       23.12 sequence(value): 检查对象是否是序列, 序列同样是可迭代对象

       23.13 string(value): 检查对象是否是string

       23.14 undefined(value): 检查一个对象是否未定义

       23.15 upper(value): 检查一个字符串是否全部大写

       24 全局函数:

       24.1 range([start, ]stop[, step]):

       {% for i in range(10) %}

              {{ i }}

       {% endfor %}

       24.2 lipsum(n = 5, html = True, min = 20, max = 100): 不知道用途

       24.3 dict(**items)  根据传入的关键字参数构造一个字典对象.

        for

       循环打印一个序列,例如:

       h1>Members

         {% for user in users %} 

      • {{ user.username|e }}
      •  {% endfor %}

      在循环内部,你可以访问一些特殊的变量

       Variable Description

       loop.index 当 前迭代的索引,从1开始算

       loop.index0 当前迭代的索引,从0开始算

       loop.revindex 相 对于序列末尾的索引,从1开始算

       loop.revindex0 相对于序列末尾的索引,从0开始算

       loop.first 相 当于 loop.index == 1.

       loop.last 相当于 loop.index == len(seq) - 1

       loop.length 序列的长度.

       loop.cycle 是 一个帮助性质的函数,可以接受两个字符串参数,如果当前循环索引是偶数,则显示第一个字符串,是奇数则显示第二个字符串。它常被在表格中用来用不同的背景 色区分相邻的行。

       设置变量值  {% set variable_name = value %}

       宏

        {% macro last_tweets(count=20) %}

      Why do you need an extension for that?  A function is perfectly fine:

            from jinja2 import contextfunction

            @contextfunction

            def widget(context, template_name, **extra_context):

                t = jinja_env.get_template('widgets/' + template_name)

                ctx = dict(context.items())

                ctx.update(extra_context)

                return t.render(ctx)

            jinja_env.globals['widget'] = widget

       And then in the template::

           {{ widget('last_tweets.html') }} 

      1{% set navigation = [('index.html', 'Index'), ('about.html', 'About')] %}

       2{% set key, value = call_something() %}

      global functions和filters类似,注册方法都是将其保存于Environment中,前者保存在Environment.globals字典中,后者保存在Environment.filters字典中即可。

      01        env.filters['filter_name'] = filter_func

       02        env.filters['globalfunction_name'] = global_func

       03    macro:

       04        {% macro   input(name, value='', type='text', size=20) %}

       05

       07        {%   endmacro %}

       08 

       09{{ input('username') }}

       10 

       11        {% macro render_dialog(title, class='dialog') -%}

       12

       13

      {{ title }}

       14

       15                    {{ caller() }}

       16               

       17

       18 

       19        {%- endmacro %}

       20 

       21        {% call render_dialog('Hello World') %}

       22            This is a simple dialog rendered by using a macro and

       23            a call block.

       24        {% endcall %}

2025-11-21 08:58

PYTHON操作excel

pip install openpyxl

from openpyxl import load_workbook

wb = load_workbook('file_name')

ws = wb['sheet_name']

for sheet in wb:

wb.close()

wb.save(filename)

sheet[1] #第一行

sheet['A'] #A列

sheet['A1']  #指定单元格

sheet['A2:D2']  # 获取行

sheet['A2:A4']  # 获取列

sheet['A1:D4']  # 获取4行4列

ws.cell(1,1).value


for row in ws.iter_rows(min_row=3,max_row=5,min_col=2,max_col=5):

print(*[r.value for r in row])

ws.append(['cell1', 'cell 2'])


在指定行插入

ws.insert_rows(7)

for cell in ws[7]:

    cell.value = 'cell value'


在指定列插入

ws.insert_cols(2)

for i in ws.max_row:

    cell = ws.cell(i, 2)

    cell.value = 'cell value'

ws.delete_rows(2) 删除行

ws.delete_cols(2)删除列

worksheet.append() 增加一行

save()方面是'w'的模式写入,会覆盖

worksheet 表存在属性:

dimensions:返回包含数据的所有单元格的最小边界范围

max_column:包含数据的最大列数

max_row:包含数据的最大行数

values:按行获取所有单元格的值,返回一个生成器

cell 属性

row:单元格的行号(从1开始)

column:单元格的列索引字母(从A开始)

col_idx:单元格的列号(从1开始)

column_letter:单元格的字母索引(A, B, ...)

coordinate: 单元格的坐标(比如:A1)

parent:单元格所在的worksheet

data_type:单元格值的类型

选择文件窗口

import win32ui

dlg = win32ui.CreateFileDialog(1)  # 1表示打开文件对话框

dlg.SetOFNInitialDir('E:/Python')  # 设置打开文件对话框中的初始显示目录

dlg.DoModal()

filename = dlg.GetPathName()  # 获取选择的文件名称

self.lineEdit_InputId_AI.setText(filename)  #将获取的文件名称写入名为“lineEdit_InputId_AI”可编辑文本框


2025-11-21 08:58

mysql子增加字段ID sql代码

ALTER TABLE users MODIFY id smallint(6) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=13;

ALTER TABLE users MODIFY id smallint(6) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=13;

ALTER TABLE users MODIFY id smallint(6) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=13;

ALTER TABLE users MODIFY id smallint(6) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=13;

2025-11-21 08:57

c# 操作数据库

SqlConnection conn = new              SqlConnection("server=172.31.9.9;uid=sa;pwd=sa;database=ufdata_101_2020");

            conn.Open();

            string sql;

            cinvcode = '100%'

            sql = $@"select top 1000 * from inventory where cinvcode like {cinvcode}";

            SqlCommand command = new SqlCommand(sql,conn);

            //int result = command.ExecuteNonQuery();//这里是update delete等引起的行号变化      

            //以下使用reader取得,然后送给grid

            SqlDataReader reader = command.ExecuteReader();

            BindingSource source = new BindingSource();

            source.DataSource = reader;

            dataGridView1.DataSource = source;

            conn.Close();


            //以下为reader使用table传递到datagrid

            DataTable data = new DataTable();

            SqlDataReader reader = command.ExecuteReader();

            data.Load(reader);

            dataGridView1.DataSource = data;

            conn.Close();

            //以下为使用dataadapter送到table里面

            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sql, conn);

            DataTable data = new DataTable();

            sqlDataAdapter.Fill(data);

            dataGridView1.DataSource = data;

            conn.Close();



2025-11-21 08:56

MONGO操作

show dbs 查看所有数据库

use runoob 打开和创建数据库

db.dropDatabase() 删除数据库

db.createCollection("集合名") 创建集合

db.collection.drop() 删除集合

db.集合名.insert(document) 或者 db.集合名.save(document)

3.2后增加了:

db.collection.insertOne()用于向集合插入一个新文档

db.collection.insertMany()用于向集合插入多个文档

db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}}) 替换文档

db.col.find().pretty() 查询文档

db.col.remove({'':''})删除指定记录

db.col.remove({}) 删除所有记录

database    database    数据库

table    collection    数据库表/集合

row    document    数据记录行/文档

column    field    数据字段/域

index    index    索引

安全验证:

use admin

#创建超级用户

db.createUser({user:"root",pwd:"123123",roles:[{role:"root",db:"admin}]})

db.createUser({  user : 'root',  pwd : 'lxb20010729B~',  roles : [    'clusterAdmin',   'dbAdminAnyDatabase',    'userAdminAnyDatabase',    'readWriteAnyDatabase'  ]})

#创建普通用户

use mydb1

db.createUser({user:"zhangsan",pwd:"123123",roles:[{role:"readWrite",db:"mydb1"}]})

db.createUser({user:"lisi",pwd:"123123",roles:[{role:"read",db:"mydb1"}]})

1、创建集合

show dbs

show dbs.user

admin数据库

use wjh2021 :创建或者打开数据库 

use 以后再db.dropDatabase(),可以删除数据库

show tables :显示wjh2021下所有的表

比方有个inventory表,或者说集合,里面的记录叫做文档

db.inventory.find() 显示所有的记录

db.inventory.find().count() 记录数,也可以灵活一点,比如在find后面加上条件

db.inventory.find('cinvcode':'0101001') 这样只显示符合cinvcode=0101001的条件,记住:字段要加引号

db.inventory.remove('字段名':'值') 注意,这是删除字段名=值的

db.inventory.sort() 排序

db.inventory.drop()删除表 db.inventory.remove()


2025-11-21 08:53

正文:网上几乎你能看到的所有的Kms-pico都是木马,正宗的Kms-pico是没有病毒软件警告的,至少我使用的腾讯的安全管家没有报。

记住以下几点:

1、正确的Kms-pico为3.5M,而带毒的几乎都10多M

2正确的Kms-pico直接就是安装界面,而带毒的几乎都是所谓的绿色的正确的不会弹出带毒窗口,提示广告、木马之类的,而带毒的都会正确的Kms-pico最后一个版本是10.2,网上所有的高版本都是带毒的。5、正确的Kms-pico地址是:getkmspico.com

(我是在墙外可以访问,墙内不知道)

最后我鄙视下国人,你加个壳表示你做的也行,竟然加上了广告和木马,也太会做买卖了,真是心眼长歪了!!!


2025-11-21 08:52

不知道有没有人开放类似的数据库,因为有服务器和带宽资源,所以就开放了,没有对最大请求数量和最大连接数进行限制,服务器内存16G,希望善用。有需要的,可以直接保存到本地,占用空间8.4G。

数据库类型:mysql

IP:221.2.156.42

端口:13306

用户名:guest

密码:lan24wf3

数据库名称:bookdata

表名:bookdata

字段:`id`, `title`, `keyword`, `content`, `type` 

        对应的`title`, `keyword`, `content`分别为:标题,分类,内容

权限:select

连接字符串:"Database = bookdata;Server = 221.2.156.42;Port = 13306;Password = lan24wf3;UserID = guest;charset = utf8mb4"

内容:关于c#,c++,java,golang,python,php等语言的50万条代码示例和函数示例,来源于各类代码平台,会持续补充。

用途:供开发自行进行查询的代码示例数据库,方便开发查询。

时间:长期


2025-11-21 08:51